web-dev-qa-db-fra.com

comment compresser toute une arborescence de dossiers sous unix, mais uniquement certains fichiers?

J'ai été coincé sur un petit problème de ligne de commande Unix.

J'ai un dossier de site Web (4 Go) dont je dois récupérer une copie, mais uniquement les fichiers .php, .html, .js et .css (qui ne représentent que quelques centaines de ko).

Je pense que dans l'idéal, il existe un moyen de compresser ou tarer un dossier entier, mais de ne saisir que certaines extensions de fichier, tout en conservant les structures de sous-dossiers. Est-ce possible, et si oui comment?

J'ai essayé de faire un Zip entier, puis de parcourir et d'exclure certains fichiers, mais cela semblait un peu excessif.

Je suis un peu nouveau sur Unix.

Toutes les idées seraient grandement appréciées.

43
willdanceforfun

Basculez dans le dossier du site Web, puis exécutez

Zip -R foo '*.php' '*.html' '*.js' '*.css' 

Vous pouvez également l'exécuter depuis l'extérieur du dossier du site Web:

Zip -r foo website_folder -i '*.php' '*.html' '*.js' '*.css'
65
Curtis Tasker

Vous pouvez utiliser find et grep pour générer la liste des fichiers, puis la diriger vers Zip

par exemple.

find . | egrep "\.(html|css|js|php)$" | Zip -@ test.Zip

(-@ indique à Zip de lire une liste de fichiers depuis stdin)

20
Nick

C'est comme ça que j'ai réussi à le faire, mais j'aime aussi la version de ghostdog74.

tar -czvf archive.tgz `find  test/ | egrep ".*\.html|.*\.php"`

Vous pouvez ajouter des extensions supplémentaires en les ajoutant à l'expression régulière.

7
MitMaro

J'ai aimé la réponse de Nick, mais comme il s'agit d'un site de programmation, pourquoi ne pas utiliser Ant pour le faire? :)

Ensuite, vous pouvez mettre un paramètre afin que différents types de fichiers puissent être compressés.

http://ant.Apache.org/manual/Tasks/Zip.html

4
James Black

vous voudrez peut-être utiliser find (GNU) pour trouver tous vos fichiers php, html, etc.

find /path -type f \( -iname "*.php" -o -iname "*.css" -o -iname "*.js" -o -iname "*.ext" \) -exec tar -r --file=test.tar "{}" +;

après cela, vous pouvez le zipper

3
ghostdog74

Vous pouvez écrire un script Shell pour copier des fichiers basés sur un modèle/une expression dans un nouveau dossier, compresser le contenu puis supprimer le dossier. Maintenant, quant à la syntaxe réelle de celui-ci, je ne vous laisse pas ça: D.

1
barfoon