112 votes

Unix : Comment supprimer des fichiers listés dans un fichier

J'ai un long fichier texte avec une liste de masques de fichiers que je veux supprimer

Exemple :

/tmp/aaa.jpg
/var/www1/*
/var/www/qwerty.php

J'ai besoin de les effacer. Essayé rm `chat 1.txt` et il dit que la liste est trop longue.

J'ai trouvé cette commande, mais quand je vérifie les dossiers de la liste, certains d'entre eux ont toujours des fichiers xargs rm <1.txt L'appel rm manuel supprime les fichiers de ces dossiers, donc aucun problème avec les autorisations.

136voto

nos Points 102226

Ce n'est pas très efficace, mais cela fonctionnera si vous avez besoin de modèles globaux (comme dans /var/www/*)

for f in $(cat 1.txt) ; do 
  rm "$f"
done

Si vous n'avez pas de motifs et êtes sûr que vos chemins dans le fichier ne contiennent pas d'espaces blancs ou d'autres choses bizarres, vous pouvez utiliser xargs comme ceci :

xargs rm < 1.txt

18voto

Ray Points 126

Vous pouvez utiliser '\n'pour définir le nouveau caractère de ligne comme délimiteur.

xargs -d '\n' rm < 1.txt

Soyez prudent avec le -rf car il peut supprimer ce que vous ne voulez pas si le 1.txt contient des chemins avec des espaces. C'est pourquoi la nouvelle ligne délimite un peu plus en sécurité.

Sur les systèmes BSD, vous pouvez utiliser l'option -0 pour utiliser de nouveaux caractères de ligne comme délimiteur comme ceci :

xargs -0 rm < 1.txt

18voto

tgdavies Points 1916

Vous pouvez utiliser ce one-liner :

cat 1.txt | xargs echo rm | sh

Ce qui fait l'expansion du shell mais exécute rm le nombre minimum de fois.

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