Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Linux Bash - Find Ausgabe an Expr übergeben

Frage Linux

Mitglied: 8schpi

8schpi (Level 1) - Jetzt verbinden

14.12.2009 um 19:08 Uhr, 7586 Aufrufe, 7 Kommentare

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
01.
find /
listet alle Dateinamen inkl. Pfade auf. Der Befehl
01.
expr length "Hallo Welt"
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:
01.
find / | expr length
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.
Mitglied: lexa-lexa
14.12.2009 um 20:58 Uhr
Zitat von 8schpi:
Leider funktioniert das so nicht. Weiß jemand warum?
"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:

01.
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.

01.
tuxbox:~ # find / -type f -print -exec expr length {} \;
Bitte warten ..
Mitglied: 8schpi
15.12.2009 um 17:56 Uhr
Hallo lexa-lexa,
die Befehlsfolge sieht gut aus. Leider klappt aber irgendwas noch nicht. Die Ausgabe ist wie folgt:
01.
[~] # find / -print -exec expr length {} \; 
02.
BusyBox v1.01 (2009.10.13-20:23+0000) multi-call binary 
03.
 
04.
Usage: find [PATH...] [EXPRESSION] 
05.
 
06.
Search for files in a directory hierarchy.  The default PATH is 
07.
the current directory; default EXPRESSION is '-print' 
08.
 
09.
EXPRESSION may consist of: 
10.
        -follow         Dereference symbolic links. 
11.
        -name PATTERN   File name (leading directories removed) matches PATTERN. 
12.
        -print          Print (default and assumed). 
13.
 
14.
        -type X         Filetype matches X (where X is one of: f,d,l,b,c,...) 
15.
        -perm PERMS     Permissions match any of (+NNN); all of (-NNN); 
16.
                        or exactly (NNN) 
17.
        -mtime TIME     Modified time is greater than (+N); less than (-N); 
18.
                        or exactly (N) days
Die Ausgabe nur der Kurzbeschreibung des Befehls deutet auf einen Syntaxfehler hin, oder? Ich finde ihn leider nicht…
Bitte warten ..
Mitglied: lexa-lexa
15.12.2009 um 18:24 Uhr
Dann ist "find" in deiner BusyBox unvollständig implementiert. Dann musst du also einen anderen Weg gehen, z.B. über ein Shell-Script.

01.
#!/bin/sh 
02.
 
03.
find / > dateiliste.txt 
04.
 
05.
while read DATEINAME ; do 
06.
   echo "$(expr length $DATEINAME) $DATEINAME" >> dateiliste2.txt 
07.
done < dateiliste.txt 
08.
 
09.
sort -n dateiliste2.txt > dateiliste.txt 
10.
rm dateiliste2.txt 
11.
cat dateiliste.txt
Bitte warten ..
Mitglied: 8schpi
16.12.2009 um 22:11 Uhr
Hallo lexa-lexa,
das ist so ziemlich genau das was ich suche. Sehr vielen Dank für die Unterstützung.

Ein Problem bleibt allerdings:
Sobald ein Leerzeichen im Dateinamen auftaucht erscheint eine Fehlermeldung in der Shell und die Länge des Dateinamens wird nicht berechnet / angezeigt.

Bis auf einen Punkt kann ich das Skript nachvollziehen:

1. Warum gibt es ein Problem mit Leerzeichen in den Zeilen? (In der Manpage von read habe ich leider keinen Hinweis gefunden.)

Die Option '-r' des Befehls 'read' führt nicht zur Lösung.
Bitte warten ..
Mitglied: 6890
17.12.2009 um 10:32 Uhr
Hallo,

probier doch mal
find ./ | xargs -I "{}" expr length {}

sollte klappen.

MfG
Bitte warten ..
Mitglied: lexa-lexa
17.12.2009 um 16:06 Uhr
Hi,

setze einfach beide $DATEINAME in Anf.-zeichen:
01.
echo "$(expr length "$DATEINAME") "$DATEINAME"" >> dateiliste2.txt
Das Problem besteht darin, dass ein Dateiname mit Leerzeichen für expr wie mehrere Parameter aussehen:

expr length datei name nummer eins
statt
expr length "datei name nummer eins"
Bitte warten ..
Mitglied: 8schpi
18.12.2009 um 20:30 Uhr
Hallo,
leider funktioniert es noch nicht.

@ godlike P: der find Befehl ist in der Umgebung leider nicht vollständig implementiert. Deshalb funktioniert die Nummer mit {} nicht (siehe auch Posts weiter oben).

@ lexa-lexa: Die zusätzlichen Anführungszeichen helfen leider noch nicht. Ich vermute mal, dass jetzt der Befehl echo vor $Dateiname schon 'dichtmacht'. Die anderen Anführungszeichen (') habe ich auch schon ausprobiert. Bei beiden Varianten kommt eine Liste von Pfaden und Dateinamen ohne Angabe der Dateinamenslänge raus.

Hat noch jemand einen Tipp, wie ich das zum laufen bekommen kann? Danke.
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
BASH String-Ausgabe modifiziert
gelöst Frage von rsadmchefBatch & Shell1 Kommentar

Hallo Team es geht um BASH Scripting für Linux. ich habe einen Textstring sid="123456789" der soll für eine type ...

Entwicklung
Linux Bash Script Fehler
gelöst Frage von icegetEntwicklung2 Kommentare

Hallo liebe Community, so sieht mein Script aus: getMAC=`vim-cmd hostsvc/net/info test=$getMAC echo "ausgabe: $test" Leider gibt mir die Bash ...

Debian
Kann Linux nicht im bios finden!
Frage von pixelBfDebian3 Kommentare

Hallo, ich bin neu hier im Forum und will mir kali Linux installieren, weil ich es für die Schule ...

Batch & Shell
Bash sqlplus oder Bash Fehler?
Frage von MarabuntaBatch & Shell7 Kommentare

Hallo, da ich sehr eingeschränkt in Bash bin, brauche ich hier etwas Hilfe. Was stimmt mit dem EOF nicht? ...

Neue Wissensbeiträge
Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 6 StundenInternet2 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 10 StundenDSL, VDSL1 Kommentar

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Windows 10

Microsoft bestätigt DMA-Policy-Problem in Win10 v1709

Information von DerWoWusste vor 10 StundenWindows 10

Wer sein Gerät mit der DMA-Policy absichert, bekommt evtl. Hardwareprobleme in v1709 von Win10. Warum? Weil v1709 endlich "richtig" ...

Verschlüsselung & Zertifikate

Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows

Information von ticuta1 vor 14 StundenVerschlüsselung & Zertifikate

Interessant Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows SSH-Kommando in CMD.exe und PowerShell

Heiß diskutierte Inhalte
Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement21 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...

Windows Server
RODC kann nicht aus Domäne entfernt werden
Frage von NilsvLehnWindows Server19 Kommentare

HAllo, ich arbeite in einem Universitätsnetzwerk mit 3 Standorten. Die Standorte haben alle ein ESXi Cluster und auf diesen ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...

Windows Server
Anmeldung direkt am DC nicht möglich
Frage von ThomasGrWindows Server15 Kommentare

Hallo, ich habe bei unserem Server 2016 Standard ein Problem. Keine Ahnung wie das auf einmal passiert ist. Ich ...