11 votes

Comment exclure un dossier lors d'opérations sur les fichiers (cp, mv, rm, chown, etc.) sous Linux ?

Comment exclure un dossier lors de l'exécution d'opérations sur les fichiers, par exemple cp, etc.

Actuellement, j'utiliserais le caractère générique * pour appliquer les opérations sur les fichiers à tous, mais j'ai besoin d'exclure un seul dossier.

La commande que je veux utiliser est la suivante chown pour changer le propriétaire de tous les fichiers d'un répertoire mais je dois exclure un sous-répertoire.

18voto

Ignacio Vazquez-Abrams Points 312628

Si vous utilisez bash et activez extglob via shopt -s extglob alors vous pouvez utiliser !(<pattern>) pour exclure le motif donné.

8voto

Dennis Williamson Points 105818
find dir_to_start -name dir_to_exclude -prune -o -print0 | xargs -0 chown owner

find dir_to_start -not -name "file_to_exclude"  -print0 | xargs -0 chown owner

5voto

danben Points 35312
for file in *; do
  if [ $file != "file_I_dont_want_to_chown" ]
    then
      chown -R Camsoft $file
  fi
done

4voto

Christopher Bruns Points 3114

Combiner plusieurs petits outils pointus d'unix : Pour exclure le dossier "foo"

% ls -d * | grep -v foo | xargs -d "\n" chown -R Camsoft

1voto

mholzmann Points 661

Dans cette situation, je recommande d'utiliser find. Vous pouvez spécifier les chemins à exclure en utilisant l'option -not -iwhilename 'PATH'. Ensuite, en utilisant exec, vous exécutez la commande que vous voulez exécuter

find . -not -iwholename './var/foo*' -exec chown www-data '{}' \;

Bien que cela aide probablement pour votre situation, j'ai aussi vu des scripts mettre le drapeau immuable. Assurez-vous de supprimer le drapeau lorsque vous avez terminé, vous devriez utiliser trap pour cela juste au cas où le scripts est tué tôt (note : exécuté à partir d'un scripts, le code de trap s'exécute lorsque la session bash se termine). Beaucoup de problèmes dans mon option mais c'est bon dans certaines situations.

cd /var
trap 'chattr -R -i foo > /dev/null 2>&1' 0
chattr -R +i foo
chown -R www-data *

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X