Bienvenido a bash. Es una cosa antigua, oscura y misteriosa, capaz de gran magia. :-)
La opción que está preguntando es para el comando find
, no para bash. Desde su línea de comando, puede man find
para ver las opciones.
el que usted está buscando es -o
a favor "o":
list="$(find /home/user/Desktop -name '*.bmp' -o -name '*.txt')"
Eso dijo ... No haga esto. Este tipo de almacenamiento puede funcionar para nombres de archivo simples, pero tan pronto como tenga que tratar con caracteres especiales, como espacios y líneas nuevas, todas las apuestas estarán desactivadas. Vea ParsingLs para más detalles.
$ touch 'one.txt' 'two three.txt' 'foo.bmp'
$ list="$(find . -name \*.txt -o -name \*.bmp -type f)"
$ for file in $list; do if [ ! -f "$file" ]; then echo "MISSING: $file"; fi; done
MISSING: ./two
MISSING: three.txt
Pathname expansion (globbing) proporciona una manera mucho mejor/más segura de realizar un seguimiento de los archivos. A continuación, también se puede utilizar matrices 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
El Bash FAQ tiene un montón de otros consejos excelentes acerca de la programación en bash.
Para hacer frente a los nombres de archivo con espacios tendrá que usar comillas para el ' $ list' variable más tarde, como en 'for i in" $ list "; hacer eco $ i; hecho'. Sin comillas dobles, su script considerará cada "nombre de archivo como this.jpg" como tres archivos: "nombre de archivo", "me gusta" y "este.jpg". – ash108