Normalement, pour supprimer des 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.
command-line
find
rm
xargs
Ashley
la source
la source
find -name "*\ *.txt" | xargs rm
fonctionne pour les fichiers de deux mots?Réponses:
Vous pouvez dire
find
etxargs
utiliser les deux terminateurs nullou (plus simple) utiliser l'
-delete
action intégrée defind
ou (merci @kos)
l'un ou l'autre devrait respecter la
ARG_MAX
limite du système sans qu'il soit nécessaire de le fairexargs
.la source
ARG_MAX
je mentionnerai également que cefind . -name "*.txt" -exec rm {} \;
serait un "coup sûr"-print0
doit être la dernière option (ou au moins après-name "*.txt"
) sinon cela frappera les fichiers qui ne sont plus limités à*.txt
...Par ailleurs, si vous avez utilisé autre chose que find, vous pouvez utiliser tr pour remplacer les sauts de ligne par des octets nuls.
Par exemple. la ligne suivante supprime les 10 derniers fichiers modifiés dans 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 source
La commande xargs utilise des tabulations, des espaces et de nouvelles lignes comme délimiteurs par défaut. Vous pouvez lui dire de n'utiliser que des caractères de nouvelle ligne ('\ n') avec l'option -d:
find . -name "*.txt" | xargs -d '\n' rm
Source réponse sur SO .
la source
-0
au lieu de-d
(pourxargs
) pour les systèmes BSD. Qu'est-ce qu'Ubuntu utilise? La réponse acceptée ici utilise-0
. Qu'est-ce qui est correct?