Исключение файла в цикле bash

10

В следующем сценарии Как исключить каталог в цикле? Я хочу сделать это, потому что все файлы являются символическими ссылками, указывающими на этот каталог, который существует на одном уровне, поэтому я не хочу добавлять его.


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

hknik
источник

Ответы:

13

Вы можете добавить continueзаявление как это:

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

Или вы можете сделать это с помощью findкоманды:

find /var/www -maxdepth 1 -type d \( -name foo \) -prune -o -print -exec bash -c "tar -czfh \`basename {}\`.tar.gz {}" \;
Корен
источник
7

Вам нужно включить extglobэто, если оно еще не включено ( shopt -s extglob):

for dir in !(dirname)/
...
Kevin
источник