GNU/Linux >> Tutoriels Linux >  >> Linux

Comment créer un tar compressé lorsqu'il y a trop de noms de fichiers pour que le shell puisse les développer sur une seule ligne ?

Comme solution robuste, utilisez find pour séparer les noms de fichiers par un caractère nul, puis diriger directement vers tar , qui lit une entrée délimitée par null :

find . -maxdepth 1 -name '*.csv' -print0 |
tar -czf archive.tgz --null -T -

Cela va maintenant gérer tous nomme correctement les fichiers et n'est pas non plus limité par le nombre de fichiers.

Utiliser ls générer une liste de noms de fichiers à analyser par un autre programme est un anti-modèle courant qui doit être évité autant que possible. find peut générer une sortie délimitée par null (-print0 ) que la plupart des utilitaires peuvent lire ou analyser davantage. Étant donné que le caractère nul est le seul caractère qui ne peut pas apparaître dans un nom de fichier (et le / , évidemment), vous serez toujours en sécurité avec ça.


Non, vous ne pouvez pas ajouter à un fichier tar compressé sans le décompresser au préalable.

Cependant, tar peut accepter sa liste de fichiers à traiter à partir d'un fichier, vous pouvez donc simplement faire :

ls *.csv > temp.txt
tar -zcf ball.tgz -T temp.txt

@slhck souligne que la solution ci-dessus ne fonctionnera pas s'il y a des espaces (et probablement d'autres caractères gênants) dans vos noms de fichiers. Cette version met chaque nom de fichier entre guillemets :

ls *.csv | sed -e 's/^\(.*\)$/"\1"/' > temp.txt
tar -zcf ball.tgz -T temp.txt

(Cela cassera bien sûr si vous avez des guillemets doubles dans vos noms de fichiers, auquel cas vous obtenez ce que vous méritez. :)


Linux
  1. Comment faire pour que sudo demande le mot de passe root ?

  2. Comment installer/créer une invite personnalisée pour la coquille de poisson ?

  3. Comment supprimer le chemin complet lors d'une compression tar.gz ?

  4. Comment imprimer la dernière ligne d'un fichier compressé gz dans la ligne de commande ?

  5. Comment démarrer un deuxième shell en mode mono-utilisateur ?

Comment rechercher des fichiers à partir de la ligne de commande Linux

Comment rendre la barre d'activités Gnome Shell petite tout le temps ?

Comment les parenthèses sont-elles interprétées sur la ligne de commande ?

Comment rendre la saisie semi-automatique du terminal lorsqu'il y a plusieurs fichiers/répertoires ?

Comment spécifiez-vous les noms de fichiers dans un zip lors de sa création sur la ligne de commande à partir d'un tube ?

Comment effacer le numéro de ligne dans Vim lors de la copie ?