
Ich versuche, find . -type d -print | wc -m
„where“ zu verwenden -m
, oder --chars
ich würde die Zeichenanzahl der Ordnernamen drucken.
Nehmen Sie den folgenden Screenshot als Beispiel, die Zeichenanzahl fürtempOrdner+tempOrdner+dingdongOrdnerist nur34, und selbst das Zählen der Schrägstriche und Punkte ist immer noch40. Warum der Befehl ausgibt43Zeichen? Woher kommen die 3 zusätzlichen Zeichen?
Antwort1
find . -type d -print | tr -d '\n' | wc -m
tr
löscht alle Zeilenumbruchzeichen und wc
zählt die gewünschte Anzahl.
Antwort2
Offenbar werden auch nachfolgende Zeilenumbrüche als Zeichen gezählt.
Angenommen, Sie möchten die Zeichenanzahl pro Verzeichnis, dann können Sie
$ find -type d -exec bash -c 'echo -n $0 | wc -m' {} \;
1
12
27
Das ergibt zusammen die 40, nach denen Sie suchen. Beachten Sie, dass echo -n
die nachfolgenden Zeilenumbrüche entfernt werden.
Auch eine Summierung dieser drei ist möglich.
$ find -type d -exec bash -c 'echo -n $0 | wc -m' {} \; | awk '{S+=$1} END {print(S)}'
40
Antwort3
ct
Legen Sie für die Ausgabe von ein Bash-/Ksh-/Zsh-Array fest wc -lm
und verwenden Sie dann die Shell-Arithmetik.
ct=($(find . -type d -print |wc -lm)); echo $((ct[1]-ct[0]))
Oder verwenden Sie Feldaufteilung und Positionsparameter:
set $(find . -type d -print |wc -lm); echo $(($2 - $1))