Добро пожаловать в Bash. Это старая, темная и таинственная вещь, способная на великую магию. : -)
Опция, о которой вы спрашиваете, предназначена для команды find
, а не для bash. В командной строке вы можете man find
увидеть опции.
То, что вы ищете, это -o
для "или":
list="$(find /home/user/Desktop -name '*.bmp' -o -name '*.txt')"
Тем не менее ... Не делайте этого. Хранение, подобное этому, может работать для простых имен файлов, но как только вам придется иметь дело со специальными символами, такими как пробелы и Новые строки, все ставки выключены. Подробнее см. ParsingLs .
$ 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
Расширение пути (глобализация) обеспечивает намного лучший / более безопасный способ отслеживания файлов. Тогда вы также можете использовать массивы 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
В Bash FAQ есть много других отличных советов по программированию в bash.