GNU/Linux >> Tutoriels Linux >  >> Linux

Utiliser find et tar avec des fichiers avec des caractères spéciaux dans le nom

Utilisez le -T fonctionnalité de tar pour lui dire de lire la liste des fichiers d'un autre fichier (tar traite chaque ligne comme un fichier séparé).

Vous pouvez alors utiliser <() notation pour que votre shell génère un pseudo-fichier à partir de la sortie d'une commande :

tar cf ctlfiles.tar -T <(find /home/db -name "*.ctl")

Si votre shell ne prend pas en charge <() notation, vous pouvez utiliser un fichier temporaire :

find /home/db -name "*.ctl" > ctlfile-list
tar cf ctlfiles.tar -T ctlfile-list
rm ctlfile-list

Vous pouvez utiliser la fonctionnalité -print0 de find avec la fonctionnalité -0 de xargs, comme ceci :

find /home/db -name '*.ctl' -print0 | xargs -0 tar -cf ctlfiles.tar

-print0 (c'est-à-dire tiret-empreinte-zéro) indique à find d'utiliser un null comme délimiteur entre les chemins au lieu d'espaces, et -0 (c'est-à-dire trait d'union zéro) indique à xargs d'attendre la même chose.

Modifié pour ajouter :

Si vous avez un grand nombre de fichiers, xargs peut invoquer tar plus d'une fois. Consultez les commentaires pour savoir comment gérer cela, ou faites en sorte que find invoque directement tar, comme ceci, qui fonctionne avec n'importe quel nombre de fichiers, même s'ils ont des espaces ou des retours à la ligne dans leurs noms :

rm -f ctlfiles.tar
find /home/db -name '*.ctl' -exec tar -rf ctlfiles.tar {} +

Lorsque l'argument suivant "-T" est "-", la liste des fichiers est tirée de stdin. Les versions récentes de tar prennent généralement en charge l'option "-null", qui indique que les fichiers donnés dans la source spécifiée par le "-T " sont séparés par des valeurs nulles.

Par conséquent, ce qui suit fonctionne avec un nombre arbitraire de fichiers, contenant éventuellement des caractères de saut de ligne :

find /home/db -name '*.ctl' -print0 | tar --null -T - -cf ctlfiles.tar

Linux
  1. Comment compresser et extraire des fichiers à l'aide de la commande tar sous Linux ?

  2. Rechercher et copier des fichiers

  3. Trouvez des fichiers et tarez-les (avec des espaces)

  4. rechercher et supprimer des fichiers avec de l'espace à l'aide de la commande find sous Linux

  5. Recherche de fichiers exécutables à l'aide de ls et grep

Comment rechercher des fichiers sous Linux avec la commande Find

Comment trouver des fichiers en utilisant la ligne de commande dans le terminal Linux

Comment rechercher des fichiers avec la commande fd sous Linux

Utilisation de la commande tr sous Linux pour jouer avec des personnages

Comment combiner la commande 'tar' avec 'find'

Comment renommer tous les fichiers avec des caractères spéciaux et des espaces dans un répertoire ?