web-dev-qa-db-fra.com

Comment utiliser find quand il y a des espaces dans les noms de répertoires?

Je dois trouver tous les fichiers .nfo dans mon répertoire de supports afin de pouvoir utiliser sed pour modifier certaines parties. Le problème est que mes dossiers ont des espaces dans les noms.

find  /media/media1/HDTV -name  \*.nfo -type f 
media/media1/HDTV/Band of Brothers/Season 1/
…

Le fichier de sortie ne sera pas trouvé par une commande sed pour changer les chaînes souhaitées.

4
papampi

find ne s'intéresse pas aux caractères spéciaux dans les noms de fichiers, mais au programme qui analyse la sortie de find. Si vous utilisez xargs, utilisez l'option -print0 pour find et l'option -0 pour xargs. Ceci indique à find et xargs d’utiliser des caractères nuls (qui ne peuvent pas figurer dans les noms de fichiers) comme séparateur entre les noms de fichiers et à xargs de ne pas effectuer d’autre analyse qui modifierait les noms de fichier contenant les espaces.

find /media/media1/HDTV -name '*.nfo' -type f -print0 |
xargs -0 sed -i 's/pattern/replacement/'

Un autre moyen d'appeler une commande sur de nombreux fichiers consiste à n'utiliser que find.

find /media/media1/HDTV -name '*.nfo' -type f -exec sed -i 's/pattern/replacement/' {} +
6
Gilles