Excluindo um arquivo no loop bash

10

No script a seguir, como excluir um diretório no loop? Eu quero fazer isso porque todos os arquivos são links simbólicos que apontam para este diretório que existe no mesmo nível, portanto, não quero adicioná-lo.


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

hknik
fonte

Respostas:

13

Você pode adicionar uma continuedeclaração como esta:

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

Ou você pode fazê-lo com o findcomando:

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

Você precisa habilitá extglob-lo se ele ainda não estiver ativado ( shopt -s extglob):

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