11
votes

Commande Shell / Script pour supprimer des fichiers dont les noms sont dans un fichier texte

J'ai une liste de fichiers dans un fichier .txt (dites list.txt). Je veux supprimer les fichiers de cette liste. Je n'ai pas fait de script avant. Certains pourraient-ils donner le script / la commande shell que je peux utiliser. J'ai coquille bash.


0 commentaires

7 Réponses :


1
votes

Les éléments suivants doivent fonctionner et vous laisse de la place pour faire d'autres choses à mesure que vous bouclez.

Edit: Ne faites pas cela, voyez ici: http://porkmail.org/era /unix/award.html

pour fichier en $ (chat list.txt); do dm $ dossier; fait


5 commentaires

sa donnant une erreur. RM: Impossible de supprimer "CAT": aucun fichier ou répertoire de ce type. RM: impossible de supprimer 'list.txt': aucun fichier ou répertoire de ce type


Format modifié légèrement. Avez-vous utilisé des tiques avant? NOTE @TIMPOTE La réponse pourrait être meilleure?


Merci d'avoir répondu. Il semble y avoir quelque chose de mal avec mon environnement Bash. Mais ne recevez personne pour vérifier mon poste de travail à mon bureau actuellement et je ne peux pas poster ce problème ici. Il suffit donc d'attendre le lundi (jour ouvrable suivant) jusqu'à ce que quelqu'un y envoie un coup d'œil.


@Adamliss: oh wow, je n'avais aucune idée. Merci d'éclairening! Remarque Votre premier lien était plus intéressant, d'autant plus qu'il se rapporte à l'exemple exact que j'ai publié, répété ici: Partmaps.org/era/unix/award.html


@yamen: Merci pour le repost. Je ne pouvais pas décider quel lien serait plus utile. En général, vous pouvez remplacer $ (CAT FOO) avec $ ( pour éviter de reproduire un processus supplémentaire (et, si vous êtes moi, des fautes de frappe aussi) .



9
votes

Essayez cette commande:

rm -f $(<file)


3 commentaires

Votre question dit que vous avez une liste de noms de fichiers dans list.txt . Apparemment, vous ne le faites pas. :-)


Soit cela ou vous devez donner le chemin complet à listers.txt


ou gio trash $ ( pour les envoyer à la corbeille :)



4
votes

Si les noms de fichiers ont des espaces dans eux, aucune des autres réponses ne fonctionnera; Ils traiteront chaque mot comme nom de fichier séparé. En supposant que la liste des fichiers est dans list.txt code>, cela fonctionnera toujours:

while read name; do
  rm "$name"
done < list.txt


2 commentaires

Bon point. Le problème est que l'op n'a pas de fichier appelé list.txt de sorte que cela lui cause des problèmes pour une raison quelconque ;-)


Droit. Voir mon commentaire sur la réponse de Tim Pote.



44
votes
xargs -a list.txt -d'\n' rm

6 commentaires

Bien que rm $ ( est plus rapide, +1 pour mentionner la limitation qu'il a sur le nombre d'arguments.


$ pour i in *; faire écho $ i; fait> ~ / a $ rm fd.xml $ en lecture f; faire rm $ f; fait <~ / A Le code ci-dessus fonctionne donné par un collègue. Cela semble très similaire à votre réponse. Merci!


Est-ce que ceci supprimer des fichiers dans les sous-résidents aussi?


xargs: option illégale - un


Option de Xargs a fonctionné pour moi ... Bien sûr ... Je devais garder 1 nom de fichier par rangée, sans espaces entre, pas de citations au début et à la fin ... une chaîne de texte ordinaire complètement désinfectée fonctionne ... .et, j'ai eu plus de 900 000 fichiers à supprimer


Quelle est la différence entre $ ( et $ (cat list.txt) ? Est-il préférable à l'autre?



2
votes

Pour une exécution rapide sur MacOS, où Xargs code> Délimiteur personnalisé d code> n'est pas possible:

<list.txt tr "\n" "\0" | xargs -0 rm


0 commentaires

0
votes

sur Linux, vous pouvez essayer: xxx

dans mon cas, mon fichier .txt contenait une liste d'éléments du type *. ext et a fonctionné bien .


0 commentaires

0
votes

Je cherchais juste une solution à cela aujourd'hui et j'ai fini par utiliser une solution modifiée de certaines réponses et certaines fonctions utilitaires que j'ai.

// This is in my .bash_profile

# Find
ffe () { /usr/bin/find . -name '*'"$@" ; } # ffe: Find file whose name ends with a given string

# Delete Gradle Logs
function delete_gradle_logs() {
   (cd ~/.gradle; ffe .out.log | xargs -I@ rm@)
}


0 commentaires