Mam duży katalog „myfiles” pełen różnych dokumentów i nie chcę modyfikować jego struktury.
Dlatego stworzyłem (kilka) innych katalogów dla każdej klasy dokumentów. Na przykład mam katalog „images”, który zawiera dowiązania symboliczne do każdego .jpg
lub .cr2
pliku w katalogu „myfiles” plus inne pliki opisowe dla każdego dowiązania symbolicznego (o tej samej nazwie) z opisem i innymi metadanymi. Dowiązania symboliczne w katalogu / images mogą mieć inną nazwę niż oryginalny połączony plik.
Próbuję znaleźć najprostszy sposób, aby upewnić się, że każdy plik obrazu w katalogu „myfiles” ma dowiązanie symboliczne do katalogu „images”.
Zobacz przykład struktury folderów
/myfiles/a.doc
/myfiles/b.jpg
/myfiles/c.cr2
/myfiles/d.mov
powinien wynikać
/images/b_800x600.jpg
/images/b_800x600.desc
/images/c_3820x5640.cr2
/images/c_3820x5640.cr2
command-line
files
find
symlink
Robert Alexander
źródło
źródło
find /myfiles -type f
pliku do pliku, a następnie użyć go,find /images -type l -exec readlink {} \; | egrep myfiles
aby uzyskać listę plików, które są dowiązane symbolicznie,/images
a następnie iterować wyniki, wykonującsed
każdy z nich w celu usunięcia ścieżek w pierwszym zapisanym pliku, ponieważ są one już zapisane mieć dowiązanie symboliczne, a pozostałe pliki to pliki, które nie mają dowiązania symbolicznego.ls -l
możesz zobaczyć liczbę linków w drugiej kolumnie.rm
te katalogi dowiązań symbolicznych i używająpax -rwl -s "\|.*regex|modifes_filename|" /path/to/myfiles/*.jpg /path/to/jpg_dir
na przykład twardych dowiązań z programowo zmienionymi nazwami plików tylko dla tych plików, które pasują do twoich plików jpg. Możesz z tego uzyskać znacznie więcej - na przykład grupowanie na podstawie czasów zmian itp.Odpowiedzi:
Jeśli dobrze zrozumiem pytanie, potrzebujesz plików w moich plikach, które nie mają dowiązań symbolicznych w obrazach:
Jest to zastrzeżenie, jeśli masz plik a.jpg w katalogu myfiles / 1 i masz dowiązanie symboliczne do tego pliku w katalogu images / 3 lub po prostu w images / plik nie zostanie zgłoszony z brakującym dowiązaniem symbolicznym.
źródło
Zakładam, że pliki poniżej
myfiles
nie są dowiązaniami symbolicznymi i że żadna z nazw plików nie zawiera nowych linii. (Moje podejście może nadal działać, jeśli te założenia zostaną naruszone, ale staje się bardziej skomplikowane.) Zakładam również, że masz wspólnereadlink
narzędzie i obsługuje-f
on kanonalizację ścieżek, co ma miejsce w Linuksie (zarówno GNU, jak i BusyBox), ale nie na np. OSX.Zbuduj listę plików i posortuj ją dla pewności:
Zbuduj listę dowiązań symbolicznych z bezwzględnymi ścieżkami.
Lista plików, które nie są połączone:
Jeśli używasz powłoki obsługującej podstawianie procesów, możesz umieścić wszystko w jednym poleceniu:
Jeśli poniższe linki
/images
są bezwzględne, możesz używaćreadlink
bez-f
opcji, która jest dostępna w * BSD i OSX.źródło
comm
polecenie, ale nie będę teraz, kiedy widzę, że już to zrobiłeś. Jednak przekierowanie zsort
nie ma sensu; wtedy podstawienia procesu nic nie wyprowadzą. Możesz także dodać wiele katalogów obok,/images
jeśli chcesz znaleźć pliki, w/myfiles
których nie ma dowiązań symbolicznych z żadnego z wielu katalogów oprócz/images
.readlink -f