Normalement, pour supprimer les fichiers avec des espaces dans leur nom de fichier, vous devez exécuter:
$ rm "file name"
mais si je veux supprimer plusieurs fichiers, par exemple:
$ find . -name "*.txt" | xargs rm
Cela ne supprimera pas les fichiers contenant des espaces.
Vous pouvez indiquer find
et xargs
aux deux utiliser des terminateurs nuls.
find . -name "*.txt" -print0 | xargs -0 rm
ou (plus simple) utilisez l'action -delete
intégrée de find
name__
find . -name "*.txt" -delete
ou (merci @kos)
find . -name "*.txt" -exec rm {} +
chacun d'eux doit respecter la limite ARG_MAX
du système sans avoir besoin de xargs
name__.
Incidemment, si vous avez utilisé autre chose que find, vous pouvez utiliser tr pour remplacer les nouvelles lignes par des octets nuls.
Par exemple. le liner suivant supprime les 10 derniers fichiers modifiés d’un répertoire, même s’ils ont des espaces dans leurs noms.
ls -tp | grep -v / | head -n 10 | tr "\n" "\0" | xargs -0 rm
La commande xargs utilise les tabulations, les espaces et les nouvelles lignes comme délimiteurs par défaut. Vous pouvez lui indiquer de n'utiliser que des caractères de nouvelle ligne ('\ n') avec l'option -d:
find . -name "*.txt" | xargs -d '\n' rm