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.
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/' {} +