Tidak termasuk file dalam bash loop


10

Dalam skrip berikut, Bagaimana cara mengecualikan direktori dalam loop? Saya ingin melakukan ini karena semua file symlink menunjuk ke direktori ini yang ada di level yang sama, jadi saya tidak ingin menambahkannya.


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

Jawaban:


13

Anda dapat menambahkan continuepernyataan seperti ini:

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

Atau Anda dapat melakukannya dengan findperintah:

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

7

Anda harus mengaktifkan extglobini jika belum diaktifkan ( shopt -s extglob):

for dir in !(dirname)/
...
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.