Chào mừng bạn đến bash. Đó là một điều cũ, tối và bí ẩn, có khả năng ma thuật tuyệt vời. :-)
Các tùy chọn mà bạn đang hỏi về là cho lệnh find
tuy nhiên, không phải cho bash. Từ dòng lệnh của bạn, bạn có thể man find
để xem các tùy chọn.
Một bạn đang muốn tìm -o
cho "hoặc":
list="$(find /home/user/Desktop -name '*.bmp' -o -name '*.txt')"
Điều đó nói rằng ... Đừng làm điều này. Lưu trữ như thế này có thể làm việc cho tên tập tin đơn giản, nhưng ngay sau khi bạn phải đối phó với các ký tự đặc biệt, như dấu cách và dòng mới, tất cả các cược được tắt. Xem ParsingLs để biết chi tiết.
$ 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
Mở rộng tên đường dẫn (globbing) cung cấp cách tốt hơn/an toàn hơn để theo dõi tệp. Sau đó, bạn cũng có thể sử dụng các mảng 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 có nhiều mẹo tuyệt vời khác về lập trình trong bash.
Để đối phó với tên tập tin với không gian bạn sẽ cần phải sử dụng dấu ngoặc kép cho môi trường ' $ list' biến sau, như trong 'for i in" $ list "; echo $ i; done'. Nếu không có dấu nháy kép, tập lệnh của bạn sẽ xem xét từng "tên tệp như this.jpg" dưới dạng ba tệp: "tên tệp", "như" và "this.jpg". – ash108