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

hknik
sumber

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 {}" \;
Coren
sumber
7

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

for dir in !(dirname)/
...
Kevin
sumber