Ich habe ein großes "myfiles" -Verzeichnis voller verschiedener Dokumente und möchte seine Struktur nicht ändern.
Ich habe daher (mehrere) andere Verzeichnisse für jede Dokumentklasse erstellt. Zum Beispiel habe ich ein "images" -Verzeichnis, das Symlinks zu jedem .jpg
oder einer .cr2
Datei im "myfiles" -Verzeichnis sowie weitere beschreibende Dateien für jeden Symlink (mit demselben Dateinamen) mit Beschreibung und anderen Metadaten enthält. Die Symlinks im Verzeichnis / images haben möglicherweise einen anderen Namen als die ursprünglich verknüpfte Datei.
Ich versuche den einfachsten Weg zu finden, um sicherzustellen, dass jede Bilddatei im Verzeichnis "myfiles" einen Symlink zum Verzeichnis "images" hat.
Sehen Sie sich ein Beispiel für die Ordnerstruktur an
/myfiles/a.doc
/myfiles/b.jpg
/myfiles/c.cr2
/myfiles/d.mov
sollte resultieren
/images/b_800x600.jpg
/images/b_800x600.desc
/images/c_3820x5640.cr2
/images/c_3820x5640.cr2
quelle
find /myfiles -type f
in einer Datei speichern und dann verwendenfind /images -type l -exec readlink {} \; | egrep myfiles
, um eine Liste der Dateien zu erhalten, die mit Symlinks verknüpft sind./images
Anschließend können Sie die Ergebnisse durchlaufen undsed
jeweils eine ausführen , um die Pfade in der ersten Datei zu löschen, die Sie speichern, da sie bereits vorhanden sind Haben Sie den Symlink und die verbleibenden Dateien sind die Dateien, die den Symlink nicht haben.ls -l
können Sie die Anzahl der Hardlinks in der zweiten Spalte sehen.rm
Diese Symlink-Verzeichnisse werdenpax -rwl -s "\|.*regex|modifes_filename|" /path/to/myfiles/*.jpg /path/to/jpg_dir
beispielsweise verwendet, um Hardlinks mit programmgesteuert geänderten Dateinamen nur für diejenigen Dateien abzurufen, die Ihren JPGs entsprechen. Sie können viel mehr als dasAntworten:
Wenn ich die Frage richtig verstanden habe, benötigen Sie Dateien in myfiles, die keine Symlinks in Bildern enthalten:
Bei diesem Ansatz gibt es eine Einschränkung, wenn Sie die Datei a.jpg im Verzeichnis myfiles / 1 haben und einen Symlink zu dieser Datei im Verzeichnis images / 3 oder einfach in images / haben. Die Datei wird nicht mit fehlendem Symlink gemeldet.
quelle
Ich
myfiles
gehe davon aus, dass die Dateien unter keine symbolischen Links sind und dass keiner der Dateinamen Zeilenumbrüche enthält. (Mein Ansatz kann immer noch funktionieren, wenn diese Annahmen verletzt werden, aber er wird komplizierter.) Ich gehe auch davon aus, dass Sie das gemeinsamereadlink
Dienstprogramm haben und dass es die-f
Kanonisierung von Pfaden unterstützt, was unter Linux (sowohl GNU als auch BusyBox) der Fall ist, aber nicht auf zB OSX.Erstellen Sie eine Liste mit Dateien und sortieren Sie sie nach Maß:
Erstellen Sie eine Liste symbolischer Verknüpfungsziele mit absoluten Pfaden.
Listen Sie die nicht verknüpften Dateien auf:
Wenn Sie eine Shell verwenden, die die Prozessersetzung unterstützt, können Sie alles in einem Befehl zusammenfassen:
Wenn die Links unter
/images
absolut sind, können Siereadlink
ohne die-f
Option verwenden, die unter * BSD und OSX verfügbar ist.quelle
comm
Befehl posten, aber ich werde es jetzt nicht tun, da ich sehe, dass Sie es bereits getan haben. Die Weiterleitung vonsort
macht jedoch keinen Sinn; dann geben die Prozessersetzungen nichts aus. Sie können auch viele Verzeichnisse neben hinzufügen,/images
wenn Sie Dateien suchen möchten, in/myfiles
denen keine Verknüpfung mit einem der verschiedenen Verzeichnisse besteht/images
.readlink -f