2017-09-07 2 views
0

(Script Shell) Nombre de produits dans un répertoire et les afficher sur(Script Shell) Nombre de produits dans un répertoire et les afficher sur

J'ai un code qui énumère les éléments dans un répertoire à l'aide ls Cependant, je Je me demandais s'il y avait un moyen de compter le nombre d'éléments dans le répertoire et afficher le nombre. Par exemple mon code à ce jour est:

cd /home/$USER/.local/share/Trash/files && ls 

Le code ci-dessus est de localiser ma poubelle, où se trouvent mes fichiers supprimés. Disons que j'ai quelque chose qui ressemble à ceci:

Music 
Wallpapers 
Movies 
Etc 

Comment puis-je faire à la place ressembler à ceci:

There are [4] Items in this directory: 

1. Music 
2. Wallpapers 
3. Movies 
4. Etc 

Toute aide est grandement appréciée!

Répondre

1

Juste tuyau ls nl:

cd /home/$USER/.local/share/Trash/files && ls | nl -s '. ' 

Si vous voulez vraiment l'en-tête, la pipe à awk:

ls | nl -s '. ' | awk ' 
    {c+=1; e=e RS $0} END {print "There are [" c "] Items in this directory" RS e}' 

ou tout simplement sauter le nl:

ls | awk '      
    {e=e RS NR ". " $0} END {print "There are [" NR "] Items in this directory" RS e}' 

Ces comptera mal si vous avez des fichiers dans le répertoire qui contiennent des nouvelles lignes dans leur nom.

+0

Merci! Pourriez-vous expliquer ce que vous entendez par «nouvelles lignes» dans leur nom. Voulez-vous dire s'il y a un espacement entre les mots? Quoi qu'il en soit, ça fonctionne bien jusqu'ici. – iamr00t

+0

Un nom de fichier * peut * contenir un saut de ligne; cela est découragé parce que les gens écrivent de manière erronée un code comme celui-ci qui suppose qu'un nom de fichier * ne contiendra * pas de retour à la ligne. – chepner