2011-12-14 3 views
14

Je commence simplement à utiliser le script bash et j'ai besoin d'utiliser la commande find avec plus d'un type de fichier.Utilisation de la commande find dans le script bash

list=$(find /home/user/Desktop -name '*.pdf') 

ce travail de code pour le type pdf mais je veux rechercher plus d'un type de fichier comme txt ou .bmp together.Have-vous une idée?

Répondre

19

Bienvenue sur bash. C'est une chose vieille, sombre et mystérieuse, capable d'une grande magie. :-)

L'option que vous demandez concerne la commande find, mais pas pour bash. À partir de votre ligne de commande, vous pouvez man find pour voir les options.

celui que vous cherchez est -o pour "ou":

list="$(find /home/user/Desktop -name '*.bmp' -o -name '*.txt')" 

Cela dit ... Ne faites pas cela. Un tel stockage peut fonctionner pour des noms de fichiers simples, mais dès que vous devez traiter des caractères spéciaux, comme des espaces et des retours à la ligne, tous les paris sont désactivés. Voir ParsingLs pour plus de détails. Les extensions de noms de fichiers (globbing) offrent un moyen beaucoup plus sûr de garder une trace des fichiers. Ensuite, vous pouvez également utiliser des tableaux de bash:

$ a=(*.txt *.bmp) 
$ declare -p a 
declare -a a=([0]="one.txt" [1]="two three.txt" [2]="foo.bmp") 
$ for file in "${a[@]}"; do ls -l "$file"; done 
-rw-r--r-- 1 ghoti staff 0 24 May 16:27 one.txt 
-rw-r--r-- 1 ghoti staff 0 24 May 16:27 two three.txt 
-rw-r--r-- 1 ghoti staff 0 24 May 16:27 foo.bmp 

Le Bash FAQ a beaucoup d'autres excellents conseils sur la programmation en bash.

3

Vous pouvez utiliser ceci:

list=$(find /home/user/Desktop -name '*.pdf' -o -name '*.txt' -o -name '*.bmp') 

En outre, vous pouvez utiliser -iname au lieu de -name pour attraper des fichiers avec ".PDF" (-majuscules) d'extension ainsi.

+2

Pour faire face aux noms de fichiers avec des espaces, vous devrez utiliser des guillemets pour le ' $ list' variable plus tard, comme dans 'for i in" $ list "; fais écho $ i; fait ». Sans guillemets, votre script considérera chaque "nom de fichier comme this.jpg" comme trois fichiers: "filename", "like" et "this.jpg". – ash108

Questions connexes