Exclure un fichier dans la boucle bash


10

Dans le script suivant, comment exclure un répertoire dans la boucle? Je veux le faire parce que tous les fichiers sont des liens symboliques pointant vers ce répertoire qui existe au même niveau, donc je ne veux pas l'ajouter.


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

Réponses:


13

Vous pouvez ajouter une continuedéclaration comme celle-ci:

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

Ou vous pouvez le faire avec la findcommande:

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

7

Vous devez l'activer extglobsi ce n'est déjà fait ( shopt -s extglob):

for dir in !(dirname)/
...
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.