Comment trouver des types de fichiers spécifiques, c’est-à-dire des fichiers pdf doc présents dans des répertoires imbriqués.
commande j'ai essayé:
$ ls -R | grep .doc
mais s'il y a un nom de fichier comme alok.doc.txt
, la commande l'affichera aussi, ce qui n'est évidemment pas ce que je veux. Quelle commande devrais-je utiliser à la place?
Si vous êtes plus à l'aise avec "ls" et "grep", vous pouvez faire ce que vous voulez en utilisant une expression régulière dans la commande grep (le caractère de fin "$" indique que .doc doit être en fin de ligne. exclure "fichier.doc.txt"):
ls -R |grep "\.doc$"
Plus d'informations sur l'utilisation de grep avec des expressions régulières dans the man .
La sortie de la commande ls
est principalement destinée à la lecture par des humains. Pour les requêtes avancées de traitement automatisé, vous devez utiliser la commande find
plus puissante:
find /path -type f \( -iname "*.doc" -o -iname "*.pdf" \)
Comme si vous avez bash 4.0 ++
#!/bin/bash
shopt -s globstar
shopt -s nullglob
for file in **/*.{pdf,doc}
do
echo "$file"
done
Parmi les autres méthodes pouvant être utilisées:
echo *.{pdf,docx,jpeg}
stat -c %n * | grep 'pdf\|docx\|jpeg'
Nous avions une question similaire. Nous voulions une liste - avec des chemins - de tous les fichiers de configuration dans le répertoire etc. Cela a fonctionné:
find /etc -type f \( -iname "*.conf" \)
Cela donne une belle liste de tous les fichiers .conf avec leur chemin. La sortie ressemble à:
/etc/conf/server.conf
Mais nous voulions faire quelque chose avec TOUS ces fichiers, comme grep pour trouver un mot ou un paramètre dans tous les fichiers. Donc nous utilisons
find /etc -type f \( -iname "*.conf" \) -print0 | xargs -0 grep -Hi "ServerName"
pour trouver via grep TOUS les fichiers de configuration dans/etc qui contiennent un paramètre tel que "NomServeur"
/etc/conf/server.conf: ServerName "default-118_11_170_172"
J'espère que vous le trouverez utile.
Sid
find . | grep "\.doc$"
Cela montrera le chemin aussi.
De même, si vous préférez utiliser le caractère générique *
(pas tout à fait comme les suggestions de regex), vous pouvez simplement utiliser ls
avec l'indicateur -l
pour répertorier un fichier par ligne (comme grep) et l'indicateur -R
de la même façon. Ensuite, vous pouvez spécifier les fichiers que vous souhaitez rechercher avec *.doc
I.E. Non plus
ls -l -R *.doc
ou si vous voulez qu'il liste les fichiers sur moins de lignes.
ls -R *.doc