D'accord, alors un problème simple ici. Je travaille sur un simple code de secours. Ca marche bien sauf si les fichiers contiennent des espaces. Voici comment je trouve les fichiers et les ajoute à une archive tar :
find . -type f | xargs tar -czvf backup.tar.gz
Le problème est que lorsque le fichier comporte un espace dans son nom, tar pense qu'il s'agit d'un dossier. En fait, existe-t-il un moyen d'ajouter des guillemets autour des résultats de find ? Ou un autre moyen de résoudre ce problème ?
12 votes
La meilleure façon d'utiliser
find ... | xargs ...
est d'utiliser le paramètre -print0/-0 sur chacun :find -print0 ... | xargs -0 ...
. Les noms de fichiers seront alors séparés par un caractère nul, ce qui signifie que vous pouvez avoir des espaces, des retours à la ligne ou d'autres éléments bizarres dans vos noms de fichiers et que cela fonctionnera quand même.8 votes
Il y a un problème à utiliser xargs et tar de cette façon lorsque vous avez un grand nombre de fichiers, xargs invoquera tar -c de manière répétée, et cela continuera à écraser votre archive, et le résultat est que vous n'aurez pas tous les fichiers que vous attendez. Voir cette explication plus détaillée y ma réponse ci-dessous.