Comment exécuter la commande sur la liste des noms de fichiers dans un fichier?


Réponses:


11

Si vous avez un fichier par ligne, une façon de procéder est:

tr '\n' '\0' < list_of_files_to_be_deleted.txt | xargs -0 -r rm --

La liste des fichiers est donnée en entrée à la trcommande qui modifie le séparateur de fichiers de saut de ligne en octet nul et la xargscommande lit les fichiers séparés par des octets nuls en entrée et lance la commande rm avec les fichiers ajoutés comme arguments.


1
Je suggère également d'utiliser rm --au lieu de simplement rm, afin que les noms de fichiers qui peuvent commencer par un tiret ne soient pas traités comme des rmparamètres.
artyom

Cela n'a pas fonctionné copain ........ tr: opérande supplémentaire monu.txt' Try tr --help 'pour plus d'informations. rm: opérande manquant Essayez `rm --help 'pour plus d'informations. ........ C'est tout ce que je peux voir
lundi

1
Avez-vous peut-être manqué le <avant le nom de fichier?
Jonas Berlin

J'ai également amélioré la commande xargs - ajoutée - conformément à la suggestion de @artyom et ajouté -r pour m'assurer qu'elle ne s'exécute pas s'il n'y a aucun fichier à supprimer.
Jonas Berlin

5

La réponse ci-dessus est bonne en ce sens qu'elle va très loin pour gérer les noms de fichiers avec des espaces et des "caractères étranges". Mais la manière la plus simple, si les noms de fichiers sont sains, est juste (avertissement, bashisme!):

rm $(< /the/file/with/names)

Pour coque régulière:

rm `cat /the/file/with/names`
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.