2017-10-17 7 views
1

Je veux imprimer tous les fichiers dans le répertoire que j'ai choisi. Je veux formater les fichiers à afficher sous les en-têtes de colonne. Mais quand j'essaie d'exécuter le code ci-dessous, je reçois des erreurs dans la console.Comment créer une boucle FOR dans BASH qui répertorie les fichiers dans un certain format

list_files() 
{ 
    FILES=/home/student/.junkdir/ 
    echo "Listing files in Junk Directory" 
    format="%8s%10s%10s $-s\n" 
    printf "$format" "Filename" "Size(Bytes)" "Type" 
    printf "$format" "--------" "-----------" "----" 
    for listed_file in $FILES; do 
     file_name=$(du $listed_file | awk '{print $2}') 
     file_size=$(du $listed_file | awk '{print $1}') 
     file_type=$(file $listed_file | cut -d ' ' -f2-) 
     printf "$format" $file_name $file_size $file_type 
    done 
} 

C'est la sortie

Listing files in Junk Directory 
FilenameSize(Bytes)  Type hBs 
-------------------  ---- hBs 
du: cannot access ‘/home/student/.junkdir/*’: No such file or directory 
du: cannot access ‘/home/student/.junkdir/*’: No such file or directory 
ERROR: cannot  open hBs 
`/home/student/.junkdir/*'  (No  such hBs 
file  ordirectory) hBs 
+3

Est-ce que vous modifiez le script lors de l'afficher? Les messages d'erreur m'amènent à penser que votre boucle for est en fait 'pour fichier_listé dans $ FILES/*' avec un caractère générique. –

+0

Le répertoire "/home/student/.junkdir/" existe-t-il? –

+0

Oui désolé, mon code original avait le caractère générique. Je pense avoir réalisé une partie de mon problème. –

Répondre

1

Utilisez la commande stat pour obtenir les données, et column faire assez la sortie.

stat -c $'%n\t%s\t%F' * | column -ts $'\t' 

En fonction

list_files() { 
    local dir=/home/student/.junkdir/ 
    echo "Listing files in Junk Directory" 
    { 
     printf "%s\t%s\t%s\n" "Filename" "Size(Bytes)" "Type" 
     stat -c $'%n\t%s\t%F' "$dir"/* 
    } | column -t -s $'\t' 
} 
+0

Pourriez-vous nous conseiller sur l'utilisation de cette méthode en utilisant les mêmes commandes que dans mon exemple? J'ai essayé moi-même mais je n'ai pas eu de joie. –

+0

quelle non-joie avez-vous? Des messages d'erreur? –

+0

Vous devez seulement appeler du une fois: 'read -r fichier_fichier_de_fichiers <<(du" $ fichier_enregistré ")' –