Befehl zum Suchen von Datei- / Pfadlängen, die zum Brennen auf DVD zu lang sind?

7

Ich versuche, eine DVD unter Windows zu brennen, aber es schlägt fehl, weil die volle Länge des Pfadnamens die Grenze von etwa 255 Zeichen überschreitet.

Unsere Dateien werden in Debian Linux gespeichert (auf das Windows mit Samba zugreift). Um zu vermeiden, dass eine zwielichtige Windows-App ausgeführt wird, um lange Pfadnamen zu finden, würde ich sie lieber mit einem Linux-Befehl finden.

Welchen Befehl könnte ich ausführen, um eine Liste der relativen Pfad- und Dateinamen für einen bestimmten Ordner auszugeben, sortiert nach der Länge jedes Ordners (in absteigender Reihenfolge)?

Die Ausgabe sollte ungefähr so ​​aussehen:

92 ./site/testapidocs/wjhk/jupload2/policies/class-use/DefaultUploadPolicy_WithoutAlertBox.ht
83 ./site/testapidocs/wjhk/jupload2/upload/class-use/PacketConstructionThreadTest.html
76 ./site/apidocs/wjhk/jupload2/upload/helper/class-use/ProgressBarManager.html
52 ./site/xref/wjhk/jupload2/gui/JUploadFileFilter.html
31 ./site/samples.java/applet.jnlp
17 ./site/index.html
Sehr unregelmäßig
quelle

Antworten:

18

Mit GNU find (unter Linux oder Cygwin) können Sie nach Dateien suchen, deren relativer Pfad mehr als 255 Zeichen lang ist:

find -regextype posix-extended -regex '.{257,}'

(257 Konten für die Initiale ./.)

Gilles 'SO - hör auf böse zu sein'
quelle
Nützlich! Es scheint auch eine Einschränkung zu geben (zumindest unter Windows), dass beim Brennen von DVDs kein Dateiname (oder Ordnername?) Länger als 106 Zeichen sein darf. Eine kleine Änderung an Ihrer Regex würde diese Fälle auch finden. Vielen Dank
sehr unregelmäßig
1
Auf einem Mac können Sie integrierte find -E . -regex ".{255,}"Pfade verwenden, um relative Pfade> = 253 Zeichen aufzulisten. 255 ist die maximale Anzahl von Wiederholungen, die von der RegEx-Engine der integrierten Suche unterstützt wird.
DKroot
7

Ich habe zwei Möglichkeiten gefunden, dies zu tun:

find . | perl -pe 'print (length($_)-1)." ";' | sort -rn | less
find . | awk '{print length,$0}' | sort -rn | less

Bei meinem ersten Versuch ( find. | Perl -pe 'print length;' | sort -rn | less ) mit dem Befehl perl wurde eine um eins zu hohe Zeichenanzahl gemeldet, da ich denke, dass die Anzahl der Zeilen ein Zeilenumbruchzeichen enthält. Es kann wahrscheinlich sauberer gemacht werden als meine obige Methode, aber ich habe das Ergebnis erhalten, das ich brauchte.

Sehr unregelmäßig
quelle
1
In der Tat beinhaltete Ihr erster Perl-Versuch die Newline. Sie könnten schreiben perl -l -pe 'print length': -lDie Marke Perl entfernt automatisch das Zeilenumbruchzeichen.
Gilles 'SO - hör auf böse zu sein'