Quelle commande, ou collection de commandes, puis-je utiliser pour renvoyer toutes les extensions de fichier dans un répertoire (y compris les sous-répertoires)?
Pour le moment, j'utilise différentes combinaisons de ls
et grep
, mais je ne trouve aucune solution évolutive.
Que dis-tu de ça:
find . -type f -name '*.*' | sed 's|.*\.||' | sort -u
find . -type f | sed 's|.*\.||' | sort -u
Fonctionne également sur mac.
répertorier toutes les extensions et leur nombre de sous-répertoires actuels et
ls -1R | sed 's/[^\.]*//' | sed 's/.*\.//' | sort | uniq -c
Boooom un autre:
find * | awk -F . {'print $2'} | sort -u
J'essayais rapidement ceci car je cherchais une bonne réponse sur Google. Je suis plus enclin à Regex qu'à Bash, mais cela fonctionne également pour les sous-répertoires. Je ne pense pas que les fichiers sans extensions soient inclus:
ls -R | egrep '(\.\w+)$' -o | sort | uniq -c | sort -r
si vous utilisez Bash 4+
shopt -s globstar
for file in **/*.*
do
echo "${file##*.}
done
Rubis (1.9+)
Ruby -e 'Dir["**/*.*"].each{|x|puts x.split(".")[-1]}' | sort -u
Encore une autre solution utilisant find (qui devrait même trier correctement les extensions de fichier avec des retours à la ligne intégrés):
# [^.]: exclude dotfiles
find . -type f -name "[^.]*.*" -exec bash -c '
printf "%s\000" "${@##*.}"
' argv0 '{}' + |
sort -uz |
tr '\0' '\n'
ls -1 | sed 's/.*\.//' | sort -u
Mise à jour: vous avez raison Matthew. Sur la base de votre commentaire, voici une version mise à jour:
ls -R1 | egrep -C 0 "[^\.]+\.[^\./:]+$" | sed 's/.*\.//' | sort -u