Không bao gồm tệp trong vòng lặp bash


10

Trong đoạn script sau, làm cách nào để loại trừ một thư mục trong vòng lặp? Tôi muốn làm điều này bởi vì tất cả các tệp là các liên kết tượng trưng đến thư mục này tồn tại ở cùng cấp độ, vì vậy tôi không muốn thêm nó.


cd /var/www
for dir in */
do
        base=$(basename "$dir")
        tar -czfh "${base}.tar.gz" "$dir"
done

Câu trả lời:


13

Bạn có thể thêm một continuetuyên bố như thế này:

cd /var/www
for dir in */
do
        if [ "$dir" == "foo" ] ; then
              continue;
        fi
        base=$(basename "$dir")
        tar -czfh "${base}.tar.gz" "$dir"
done

Hoặc bạn có thể làm điều đó bằng findlệnh:

find /var/www -maxdepth 1 -type d \( -name foo \) -prune -o -print -exec bash -c "tar -czfh \`basename {}\`.tar.gz {}" \;

7

Bạn cần kích hoạt tính năng extglobnày nếu nó chưa được kích hoạt ( shopt -s extglob):

for dir in !(dirname)/
...
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.