find,xargs,tar : Compress files from a list — Compresser des fichiers à partir d’une liste

You want to compress some files, say all the script bash you’ve got in your home directory. You probably know of to do this in several lines or with a for loop. Combining find and xargs give you THE command line.

Vous voulez compresser plusieurs fichiers, par exemple tous vos scripts bash. Vous savez surement comment faire ça en plusieurs lignes ou avec une boucle for. En combinant find et xargs, vous obtenez LA ligne de commande.

First, you will have to find what you want:

find ~/ -name "*sh"

If you want a specific folder: change “~/” by “/path/to/your/file”. Of course, change the “*sh” to what you want.
In order to have the list in one line, add the print0 (zero) option (cf man find):

find ~/ -name "*sh" -print0

add “; echo” if you want to execute the command with “no bug”.
Then, we use xargs with the -0 option (corresponding to the -print0 of find)
find ~/ -name "*sh" -print0 | xargs -0t tar -zcvf foofile.tar.gz

Add whatever options you like for your tar (and xargs), once the output is correct, execute without the -t(verbose) option.

If you have any problems, please write comments. For example, I’m not sure of the behaviour of the command if you have spaces in your filenames/directories… (which is bad)

Finally, you can add more pipes, more options, …

Premièrement, trouver les fichiers que vous voulez :

find ~/ -name "*sh"

Pour un dossier en particulier, changez “~/” par “/chemin/vers/le/dossier”. Bien sûr, on peut aussi changer le “*sh” par ce que l’on veut.
Pour avoir la liste en une ligne, ajoutez l’option print0 (zero, cf man find) :

find ~/ -name "*sh" -print0

Ajoutez « ; echo » si vous voulez exécuter cette ligne sans « bug ».
Ensuite on utilise xargs avec l’option -0 (correspondant à -print0 de find)
find ~/ -name "*sh" -print0 | xargs -0t tar -zcvf foofile.tar.gz

Ajoutez les options que vous aimez à tar (et xargs), et une fois la sortie correcte, enlevez l’option -t (pour du verbeux).

Si vous avez des problèmes, laissez des commentaires. Par exemple, je ne suis pas sûr du comportement de ce code si les chemins/fichiers ont des espaces (mais bon, c’est mal).

Enfin, amusez-vous avec plus de pipes, d’options, …

~ by loquehumaine on 2008, August 28 - Thursday.

One Response to “find,xargs,tar : Compress files from a list — Compresser des fichiers à partir d’une liste”

  1. Un article en anglais et un autre en français amélioreraient grandement la lisibilité.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: