
Estoy intentando utilizar find . -type d -print | wc -m
dónde -m
o --chars
imprimiría el recuento de caracteres de los nombres de las carpetas.
Tome la siguiente captura de pantalla como ejemplo, el recuento de caracteres paracarpeta temporal+carpeta temporal+dingdongCarpetaes solo34, y el evento que cuenta las barras y los puntos sigue siendo40. ¿Por qué se imprime el comando?43¿caracteres? ¿De dónde vienen los 3 personajes extra?
Respuesta1
find . -type d -print | tr -d '\n' | wc -m
tr
eliminará todos los caracteres de nueva línea y wc
contará el número que desee.
Respuesta2
Aparentemente, las nuevas líneas finales también se cuentan como un carácter.
Supongamos que desea el recuento de caracteres por directorio, puede hacerlo
$ find -type d -exec bash -c 'echo -n $0 | wc -m' {} \;
1
12
27
Lo cual suma los 40 que buscas. Tenga en cuenta que echo -n
elimina las nuevas líneas finales.
También es posible sumar estos tres.
$ find -type d -exec bash -c 'echo -n $0 | wc -m' {} \; | awk '{S+=$1} END {print(S)}'
40
Respuesta3
Establezca una matriz bash/ksh/zsh ct
como salida de wc -lm
y luego use la aritmética del shell.
ct=($(find . -type d -print |wc -lm)); echo $((ct[1]-ct[0]))
O utilice división de campos y parámetros posicionales:
set $(find . -type d -print |wc -lm); echo $(($2 - $1))