Wie finde ich Dateien, drucke einige Standardinformationen zu diesen Dateien und drucke die Alpha-Zeichenanzahl jedes Dateinamens?


0

Ich möchte so etwas:

find "$dir" -type f -printf '%i:<alpha_char_count_of_base_filename>:%d:%p\n'

Dann möchte ich zuerst nach Inode-Nummer sortieren, dann nach alpha_char_count_of_base_filename. Ich glaube, ich habe einen Teil der Lösung herausgefunden.

Ich weiß, dass ich den alpha_char_count_of_base_filename mit diesem Code erhalten kann:

basename "$filename" | tr -cd [:alpha:] | wc -m

Es funktioniert jedoch nicht, so etwas zu versuchen (nicht lachen):

find "$dir" -type f -printf '%i:$(basename -print | tr -cd [:alpha:] | wc -m):%d:%p\n'

Ich habe viele Ideen ausprobiert und habe keine funktionierende Lösung gefunden. Hier ist eine andere Idee, die ich ausprobiert habe:

find "$dir" -type f -printf '%i:%d:%p\n' | awk 'BEGIN{FS=":";OFS=":";} {print $1,system("basename "$3" | tr -cd [:alpha:] | wc -m"),$2,$3"\n";}'

Das scheint mich näher zu bringen, aber es gibt den alpha_char_count_of_base_filename an der falschen Stelle aus. Ich bin mir auch nicht sicher, ob das eine gute Programmierform ist.

Mein Shell-Programmierbuch bietet mir nichts, was mir helfen könnte, eine Lösung für diese spezielle Frage zu finden. Google auch nicht (bis jetzt).

Dies wird als Lösung für diese Frage verwendet .

Antworten:


2
find "$dir" -type f -printf '%i:%f:%d:%p\n' | 
awk -F: -v OFS=: '{n=$2; gsub(/[^[:alpha:]]/,"",n); $2=length(n); print}'

hmmm, brauche die temp Variable nicht:

awk -F: -v OFS=: '{gsub(/[^[:alpha:]]/,"",$2); $2=length($2); print}'

Vielen Dank! Das einzige Problem ist, dass ich die Alpha-Zahl des gesamten Pfads anstelle des gewünschten Basisnamens (nur Dateiname) erhalte.
— MountainX

Ich denke, ich kann damit leben. Danke. Ich werde diese Antwort akzeptieren, wenn keine Antwort auf den Basisnamen eingeht.
— MountainX

@MountainX, hat meine Antwort so aktualisiert, dass nur der Basisname verwendet wird - er verwendet den %fFormatierungsspezifizierer, um den Basisnamen an awk zu senden, wo er durch die "
— Alphalänge
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.