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.