Hallo,
wie kann ich auflisten, ob und wieviele harte Links es zu den Dateien in einem Verzeichnis gibt?
Anmeldungsdatum: Beiträge: 2726 |
Hallo, wie kann ich auflisten, ob und wieviele harte Links es zu den Dateien in einem Verzeichnis gibt? |
||
![]() Anmeldungsdatum: Beiträge: Zähle... |
Die Information ist doch in $ find . -maxdepth 1 -type f -printf '%n %p\n' |
||
Projektleitung
Anmeldungsdatum: Beiträge: 12527 |
Und wenn Du die Dubletten finden willst, könntest Du das z.B. so machen
Oder was mit |
||
(Themenstarter)
Anmeldungsdatum: Beiträge: 2726 |
Marc_BlackJack_Rintsch schrieb:
Stimmt, danke. Die kleine vorangestellte Zahl habe ich nie beachtet und deren Bedeutung ging mir aus
$ find . -maxdepth 1 -type f -ls'
Genau danach wollte ich als zweites auch noch fragen, danke! insgesamt 8532 drwxrwxr-x 4 ich ich 4096 Jan 15 17:38 . drwxrwxr-x 4 ich ich 4096 Jan 15 16:46 .. drwxrwxr-x 2 ich ich 4096 Jan 4 17:58 157_1306 drwxrwxr-x 2 ich ich 4096 Jan 4 17:58 161_1707 -rw-r--r-- 2 ich ich 5193975 Jun 13 2013 IMG_0296.JPG -rw-r--r-- 2 ich ich 3518754 Jul 17 2013 IMG_0310.JPG |
||
Projektleitung
Anmeldungsdatum: Beiträge: 12527 |
Dann liegen die Dubletten vermutlich nicht unterhalb von dem aktuellen Verzeichnis, wo Du suchst. Da musst Du dann mal das Verzeichnis wechseln oder die beiden Punkte durch eine Liste von Verzeichnissen ersetzen. |
||
(Themenstarter)
Anmeldungsdatum: Beiträge: 2726 |
Hm, daran kann's eigentlich nicht liegen, denn die Dubletten der beiden JPG-Dateien sind, jeweils eine, in den aufgeführten Ordnern: $ ls -alR .: insgesamt 8532 drwxrwxr-x 4 ich ich 4096 Jan 15 17:38 . drwxrwxr-x 4 ich ich 4096 Jan 15 16:46 .. drwxrwxr-x 2 ich ich 4096 Jan 4 17:58 157_1306 drwxrwxr-x 2 ich ich 4096 Jan 4 17:58 161_1707 -rw-r--r-- 2 ich ich 5193975 Jun 13 2013 IMG_0296.JPG -rw-r--r-- 2 ich ich 3518754 Jul 17 2013 IMG_0310.JPG ./157_1306: insgesamt 5084 drwxrwxr-x 2 ich ich 4096 Jan 4 17:58 . drwxrwxr-x 4 ich ich 4096 Jan 15 17:38 .. -rw-r--r-- 2 ich ich 5193975 Jun 13 2013 IMG_0296.JPG ./161_1707: insgesamt 3448 drwxrwxr-x 2 ich ich 4096 Jan 4 17:58 . drwxrwxr-x 4 ich ich 4096 Jan 15 17:38 .. -rw-r--r-- 2 ich ich 3518754 Jul 17 2013 IMG_0310.JPG Danke für die schnelle Antwort. |
||
Projektleitung
Anmeldungsdatum: Beiträge: 12527 |
Bist Du sicher, dass es sich tatsächlich um Dateien mit mehreren Verzeichniseinträgen und nicht um Kopien handelt? $ ls -alR .: insgesamt 8532 drwxrwxr-x 4 ich ich 4096 Jan 15 17:38 . drwxrwxr-x 4 ich ich 4096 Jan 15 16:46 .. drwxrwxr-x 2 ich ich 4096 Jan 4 17:58 157_1306 drwxrwxr-x 2 ich ich 4096 Jan 4 17:58 161_1707 -rw-r--r-- 2 ich ich 5193975 Jun 13 2013 IMG_0296.JPG -rw-r--r-- 2 ich ich 3518754 Jul 17 2013 IMG_0310.JPG ./157_1306: insgesamt 5084 drwxrwxr-x 2 ich ich 4096 Jan 4 17:58 . drwxrwxr-x 4 ich ich 4096 Jan 15 17:38 .. -rw-r--r-- 2 ich ich 5193975 Jun 13 2013 IMG_0296.JPG ./161_1707: insgesamt 3448 drwxrwxr-x 2 ich ich 4096 Jan 4 17:58 . drwxrwxr-x 4 ich ich 4096 Jan 15 17:38 .. -rw-r--r-- 2 ich ich 3518754 Jul 17 2013 IMG_0310.JPG
Kannst Du mal die Option "-i" zum Du könntest auch mal |
||
(Themenstarter)
Anmeldungsdatum: Beiträge: 2726 |
Beides gemacht: $ ls -ailR .: insgesamt 8532 657182 drwxrwxr-x 4 ich ich 4096 Jan 15 17:38 . 656385 drwxrwxr-x 4 ich ich 4096 Jan 15 16:46 .. 656443 drwxrwxr-x 2 ich ich 4096 Jan 4 17:58 157_1306 657032 drwxrwxr-x 2 ich ich 4096 Jan 4 17:58 161_1707 657030 -rw-r--r-- 2 ich ich 5193975 Jun 13 2013 IMG_0296.JPG 657041 -rw-r--r-- 2 ich ich 3518754 Jul 17 2013 IMG_0310.JPG ./157_1306: insgesamt 5084 656443 drwxrwxr-x 2 ich ich 4096 Jan 4 17:58 . 657182 drwxrwxr-x 4 ich ich 4096 Jan 15 17:38 .. 657030 -rw-r--r-- 2 ich ich 5193975 Jun 13 2013 IMG_0296.JPG ./161_1707: insgesamt 3448 657032 drwxrwxr-x 2 ich ich 4096 Jan 4 17:58 . 657182 drwxrwxr-x 4 ich ich 4096 Jan 15 17:38 .. 657041 -rw-r--r-- 2 ich ich 3518754 Jul 17 2013 IMG_0310.JPG $ find . -printf '%i\n' | sort -n | uniq -cd 2 657030 2 657041 |
||
Projektleitung
Anmeldungsdatum: Beiträge: 12527 |
|||
(Themenstarter)
Anmeldungsdatum: Beiträge: 2726 |
Jetzt kommt immerhin was ☺ Allerdings kann ich bei ca. 500 Dateien nicht prüfen, ob das Ergebnis auch stimmt, denn alles kommt ziemlich durcheinander, und auch nicht sehen, welche Dubletten/Vielfache zusammengehören: 802777 ./IMG_0893.JPG 696616 ./IMG_0841.JPG 689238 ./IMG_0784.JPG 689239 ./IMG_0782.JPG 689198 ./IMG_0679.JPG 689240 ./IMG_0780.JPG 696621 ./IMG_0842.JPG 682796 ./181_0104/IMG_0565.JPG 689148 ./181_0104/IMG_0561.JPG 689235 ./181_0104/IMG_0562.JPG 689237 ./181_0104/IMG_0564.JPG 689440 ./IMG_0830.JPG 682664 ./IMG_0816.JPG 689238 ./198_0410/IMG_0784.JPG 689239 ./198_0410/IMG_0782.JPG [.....]
Außerdem steht in
Es ist also nicht klar, ob auch Tripletten etc. gefunden werden. Weiterhin wäre es allgemein auch interessant, auch Dubletten finden zu können, die außerhalb des Startpunkts liegen. Ich wundere mich schon, dass GNU coreutils dafür keine Standard-Funktionalität für bereitstellt. |
||
Supporter, Wikiteam
![]() Anmeldungsdatum: Beiträge: 7816 |
find kann direkt nach Hardlinks (= zusätzlichen Dateinamen) zu einer gegebenen Datei suchen: find SUCHPFAD -samefile DATEINAME Beispielsweise listet Dir find . -samefile IMG_0296.JPG alle Dateinamen der angegebenen Datei unterhalb des aktuellen Verzeichnisses. Du musst natürlich für alle Verzeichnisse ab und unterhalb des Suchpfades das Lese- und das Ausführen-Recht haben und genügend Zeit mitbringen. |
||
Projektleitung
Anmeldungsdatum: Beiträge: 12527 |
👍
Dann hängst Du einfach eine Sortierung an:
Ja, werden sie. Kann man auch recht einfach ausprobieren.
Dann wähle einfach den Mountpoint des Dateisystems anstatt "." zum Suchen.
Es gibt immerhin so etwas: DupeGuru, fslint
Dann müsste man das noch weiter aufbohren. Da fehlt mir gerade die Zeit. Du siehst es aber, wenn Du nach Inode-Nummer sortierst, wie oben angegeben, weil dann alle Einträge für einen Inode untereinander stehen. |
||
![]() Anmeldungsdatum: Beiträge: Zähle... |
@kB: Vor allem müsste dann für jede Datei im Verzeichnisbaum der komplette Verzeichnisbaum durchsucht werden, was wohl nicht wirklich praktikabel ist. Und auch keine Dateien findet die Hardlinks haben, wo die Einträge dazu aber nicht innerhalb des Verzeichnisbaums liegen. UlfZibis möchte das ja nicht für eine Datei haben, sondern gerne eine Übersicht über alle Dateien innerhalb eines Verzeichnisbaums. @UlfZibis: Du musst doch das Ergebnis nur noch einmal numerisch sortieren, dann siehst Du welche zusammengehören und wie viele da jeweils aufeinander folgen. Mit ein wenig Shell- oder AWK-Code kann man die auch zusammenfassen. Edit: Oder man jagt das durch GNU $ datamash --no-strict --sort -t ' ' groupby 1 count 2 collapse 2 < test.txt 682664 1 ./IMG_0816.JPG 682796 1 ./181_0104/IMG_0565.JPG 689148 1 ./181_0104/IMG_0561.JPG 689198 1 ./IMG_0679.JPG 689235 1 ./181_0104/IMG_0562.JPG 689237 1 ./181_0104/IMG_0564.JPG 689238 2 ./198_0410/IMG_0784.JPG,./IMG_0784.JPG 689239 2 ./198_0410/IMG_0782.JPG,./IMG_0782.JPG 689240 1 ./IMG_0780.JPG 689440 1 ./IMG_0830.JPG 696616 1 ./IMG_0841.JPG 696621 1 ./IMG_0842.JPG 802777 1 ./IMG_0893.JPG Wobei ich hier jetzt allerdings davon ausgegangen bin, dass die Dateinamen keine Leerzeichen und keine Kommas enthalten. |
||
(Themenstarter)
Anmeldungsdatum: Beiträge: 2726 |
Fein, das klappt zumindest für einzelne Dateien. Für einen ganzen Suchbaum wird's dann wohl komplizierter, denn folgendes klappt leider nicht: find . -samefile "*" |
||
(Themenstarter)
Anmeldungsdatum: Beiträge: 2726 |
Suppi! Genau das isses.
An sowas hatte ich auch gedacht, doch ist das wohl sicher eine längliche Aktion, ich hoffte auf was flotteres. Außerdem wollte ich ja nicht die Dubletten sämtlicher Dateien im Dateisystem finden, sondern nur die Dateien im betreffenden Suchpfad untersuchen. Guck ich mir beizeiten mal an, im Moment habe ich ja eine Lösung ☺
Edit: Dann sehe ich aber nur wieviele im Suchpfad existieren, nicht aber, ob woanders noch Dubletten herumgeistern. find . -printf '%i %n %p\n' | fgrep -f <(find . -printf '%i\n' | sort -n | uniq -d) | sort -n
Eventuell geht es mit |