Виключення файлу в циклі bash


10

У наступному скрипті: Як я виключаю каталог у циклі? Я хочу це зробити, тому що всі файли є посиланнями, що вказують на цей каталог, який існує на одному рівні, тому я не хочу його додавати.


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

Відповіді:


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)/
...
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.