/ / Bash: afficher wc avec une sortie à trois chiffres? - bash, ls, wc

Bash: afficher wc avec une sortie à trois chiffres? - bash, ls, wc

effectuer le nombre de mots d'un répertoire.

ls | wc -l

Si la sortie est "17", je voudrais que la sortie affiche "017".

J'ai joué avec | printf avec peu de chance. Toute suggestion serait appréciée.

Réponses:

0 pour la réponse № 1

ls | wc -l vous dira combien de lignes il a rencontré analyser la sortie de ls, qui peut ne pas être identique au nombre de noms de fichiers (autres que des points) dans le répertoire. Et si un nom de fichier a une nouvelle ligne? Un moyen fiable d’obtenir le nombre de fichiers dans un répertoire est

x=(*)
printf "%03dn" "${#x[@]}"

Mais cela ne fonctionnera qu'avec un shell qui supporte les tableaux. Si vous souhaitez une approche compatible POSIX, utilisez une fonction shell:

countargs() { printf "%03dn" $#; }
countargs *

Cela fonctionne car lorsqu'un glob étend le shellconserve les mots dans chaque membre de l'extension globale, quels que soient les caractères du nom de fichier. Mais lorsque vous dirigez un nom de fichier, la commande située de l’autre côté du tuyau ne peut pas "indiquer qu’elle est autre chose qu’une chaîne normale, elle ne peut donc" effectuer aucun traitement spécial.


2 pour la réponse № 2

printf est le chemin à suivre pour formater des nombres:

printf "There were %03d filesn" "$(ls | wc -l)"

0 pour la réponse № 3

Vous pouvez utiliser sed.

ls | wc -l | sed "s/^17$/017/"

Et cela s'applique à tous les nombres à deux chiffres.

ls | wc -l | sed "/^[0-9][0-9]$/s/.*/0&/"