Linux Bash - Find Ausgabe an Expr übergeben
Ich habe ein kleines Problem in der Shell. Ich möchte die Ausgabe von 'find /' an den Befehl 'expr length' übergeben.
Linux auf einem Qnap 219P, Zugriff per ssh.
Ich möchte gerne feststellen, ob ich Dateinamen auf meinem System habe, die länger als z.B. 240 Zeichen sind. Ich meine das müsste mit einer Zeile in der Shell unter Linux funktionieren.
Der Befehl
listet alle Dateinamen inkl. Pfade auf. Der Befehl gibt die Länge 10 aus.
Wenn beide Befehle verknüpft wären hatte man schon eine Liste der Längen der Dateinamen.
Die Verknüpfung der Befehle müsste meiner Meinung nach so aussehen:
Leider funktioniert das so nicht. Weiß jemand warum?
Google erschlägt mich mit Erklärungen, aber ich finde den Haken nicht.
Danke für einen Tipp.
Ich möchte gerne feststellen, ob ich Dateinamen auf meinem System habe, die länger als z.B. 240 Zeichen sind. Ich meine das müsste mit einer Zeile in der Shell unter Linux funktionieren.
Der Befehl
find /
expr length "Hallo Welt"
Wenn beide Befehle verknüpft wären hatte man schon eine Liste der Längen der Dateinamen.
Die Verknüpfung der Befehle müsste meiner Meinung nach so aussehen:
find / | expr length
Google erschlägt mich mit Erklärungen, aber ich finde den Haken nicht.
Danke für einen Tipp.
Please also mark the comments that contributed to the solution of the article
Content-Key: 131676
Url: https://administrator.de/contentid/131676
Printed on: April 26, 2024 at 05:04 o'clock
7 Comments
Latest comment
"Hallo Welt" ist ein String, das Ergebnis von find / ist aber eine *Liste* von Strings.
Du kannst "find" die einzelnen Dateinamen an "Expr" übergeben lassen:
Gib das so in der shell ein, dann erhältst du Datei- und Ordnernamen und deren Länge auf der folgenden Zeile. Beachte den "\" vor dem Semikolon. In {} setzt find das Argument, siehe man 1 find.
Wenn du nur Dateien prüfen willst, musst du "-type f" ergänzen.
Du kannst "find" die einzelnen Dateinamen an "Expr" übergeben lassen:
tuxbox:~ # find / -print -exec expr length {} \;
Gib das so in der shell ein, dann erhältst du Datei- und Ordnernamen und deren Länge auf der folgenden Zeile. Beachte den "\" vor dem Semikolon. In {} setzt find das Argument, siehe man 1 find.
Wenn du nur Dateien prüfen willst, musst du "-type f" ergänzen.
tuxbox:~ # find / -type f -print -exec expr length {} \;
Dann ist "find" in deiner BusyBox unvollständig implementiert. Dann musst du also einen anderen Weg gehen, z.B. über ein Shell-Script.
#!/bin/sh
find / > dateiliste.txt
while read DATEINAME ; do
echo "$(expr length $DATEINAME) $DATEINAME" >> dateiliste2.txt
done < dateiliste.txt
sort -n dateiliste2.txt > dateiliste.txt
rm dateiliste2.txt
cat dateiliste.txt
Hallo,
probier doch mal
sollte klappen.
MfG
probier doch mal
find ./ | xargs -I "{}" expr length {}
sollte klappen.
MfG