2017-10-19 3 views
-2

Je cherche à sortir une liste de contenu formatée par taille, type de chaque fichier et le nom du fichier sans l'extension.Comment puis-je collecter et formater le nom de fichier, la taille et l'extension du contenu du répertoire dans bash?

J'ai essayé d'utiliser ls grep et awk mais en vain. Je ne sais pas comment cela pourrait être fait, quelqu'un pourrait-il m'aider?

Je cherche la sortie à montrer comme ci-dessous;

Filename  FileSize  Extension 
    Filename  FileSize  Extension 
    Filename  FileSize  Extension 
    Filename  FileSize  Extension 

et ainsi de suite.

+0

au moins afficher le résultat approximatif attendu, montrer à quoi cela devrait ressembler – RomanPerekhrest

+0

Désolé Alors je m'attends à ce que la sortie ressemble à ceci. filename filename taille de fichier – NinsK

+0

'filetype' est considéré comme * extension *? – RomanPerekhrest

Répondre

0

Ici, il n'y a pas besoin de ls (et, en fait, une bonne raison de ne pas l'utiliser, voir Why you shouldn't parse the output of ls).

Comme bash natif:

#!/usr/bin/env bash 

for file in *; do     # iterate over contents of current directory 
    [[ -f "$file" ]] || continue # skip things that aren't files 
    size=$(wc -c <"$file")   # collect size 
    # ...and actually format and print metadata 
    printf '%20q %20s %q\n' "${file%.*}" "$size" "${file##*.}" 
done 

Ici, %q est utilisé pour faire en sorte que même les noms avec des composants non imprimables sont mis en forme sans ambiguïté (vous pouvez faire la différence entre un nom avec des espaces et un nom avec des onglets, pour Exemple).