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.
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