J'ai essayé de listr les files dans le directory en utilisant ls et en passant différentes options.
A-t-il la capacité de listr les types de files aussi? Je veux savoir quels sont exécutables, sharedlibs ou juste des files ASCII sans faire de command de file sur des files individuels.
Il ne montrera pas cette information.
Vous pouvez diriger la sortie de la find
vers le file -f -
, comme suit:
$ find /usr/local/bin | file -f - /usr/local/bin: directory /usr/local/bin/apt: Python script, ASCII text executable /usr/local/bin/mint-md5sum: ASCII text /usr/local/bin/search: Bourne-Again shell script, ASCII text executable /usr/local/bin/gnome-help: Python script, ASCII text executable /usr/local/bin/office-vb.sh: ASCII text /usr/local/bin/pastebin: Python script, ASCII text executable /usr/local/bin/highlight: POSIX shell script, ASCII text executable /usr/local/bin/yelp: Python script, ASCII text executable
Notez que find
est utilisé à la place de ls
car il imprimera le path complet, alors que ls
n'imprimera que le nom du file. Par conséquent, si vous avez simplement besoin de faire cela avec les files de votre directory actuel, alors:
ls | file -f -
travaillerait.
ls
ne fait pas ça. Son travail consiste à rendre count des métadonnées des files (permissions, horodatage, etc.) et non du contenu des files. Mais le file
lui-même (combiné avec un joker shell pour listr tous les files):
file *
pour le directory actuel, ou
file /some/directory/*
dans un autre directory.
Si vous souhaitez combiner des métadonnées et des informations de contenu de file, vous pouvez combiner la sortie de ls
et de file
. Une façon consiste à organiser deux commands pour listr un file par ligne dans le même ordre, et utiliser l'utilitaire paste
pour les combiner – quelque chose comme
paste <(ls -dlog -- *) <(file -b -- *)
(Cela utilise la substitution de process, qui est disponible dans les shells interactifs communs: bash, zsh, également dans ksh93). Si vous avez l'utilitaire de column
, c'est un moyen pratique d'aligner les colonnes:
paste <(ls -dlog -- *) <(file -b -- *) | column -ts $'\t'
Si vous souhaitez afficher les champs dans un ordre différent, join
plutôt les champs du nom de file. Je fais un peu de va-et-vient entre les espaces et les tabs pour faire face aux noms de files contenant des espaces et produire des résultats alignés verticalement.
join -t $'\t' -1 2 -2 1 <(ls -dlog -- * | sed 's/^\([^ ][^ ]* *[^ ][^ ]* *[^ ][^ ]* *[^ ][^ ]* *[^ ][^ ]* *[^ ][^ ]*\) */\1\t/') \ <(file -- * | sed 's/: */\t/') | column -ts $'\t'