web-dev-qa-db-fra.com

comment extraire récursivement les dossiers où les dossiers sont décompressés mais les fichiers qu’ils contiennent sont compressés.

J'ai tout essayé et des dizaines d'anciens messages de forum sur ce genre de choses ... rien ne fonctionne.

J'ai chargé un répertoire de sauvegarde wordpress sur le serveur Web après la suppression inopinée du répertoire existant.

Je ne sais pas pourquoi, cependant, la façon dont la sauvegarde a été archivée semble étrange et je ne parviens pas à faire décompresser correctement cette fichue chose.

Au mieux, les méthodes que j'utilise actuellement décompressent tous les répertoires/sous-répertoires wordpress mais TOUS les fichiers qu'ils contiennent restent compressés avec l'extension de fichier ".gz".

il y a plus de 500 fichiers dans des sous-dossiers pour effectuer cette tâche.

Quelqu'un peut-il me donner une réponse simple et directe sur la manière de réaliser cette tâche?

Je peux obtenir une partie du chemin avec le code suivant, cependant, cela n'ira pas récursivement dans les sous-dossiers non compressés à la recherche de davantage de fichiers ".gz" à décompresser (remarque ... les dossiers/sous-dossiers sont déjà décompressés mais ne contiennent pas de fichiers ).

pour f dans wordpress/. gz; do gunzip $ f; done *

1
adam

Vous pouvez y parvenir avec find (Voir: page de manuel ) et son indicateur -exec. pour les archives tar, la ligne suivante fera l'affaire:

find wordpress/ -type f -name *.tar.gz -exec tar -xf {} \;

Pour gunzip, vous pouvez utiliser:

find wordpress/ -type f -name *.gz -exec gunzip -k {} \;

S'il existe deux types de fichiers dont vous avez besoin de faire ce type de fichier, exécutez d'abord gunzip sans l'indicateur -k (garder le fichier), puis exécutez la ligne de recherche pour les fichiers tar, un tout petit peu modifié:

find wordpress/ -type f -name *.gz -exec gunzip {} \;
find wordpress/ -type f -name *.tar -exec tar -xf {} \;
1
Videonauth

ajouter à la réponse que j’ai marquée comme étant correcte pour moi ... voici le code qu’un ami a posté pour moi et ses instructions.

depuis le répertoire public_html /, j’ai essayé les deux options de code suivantes.

pour f dans wordpress/. gz; faire gunzip $ f; terminé*

ce qui précède voudrait dire que, pour obtenir plus d’un sous-niveau, j’aurais besoin de le saisir encore et encore en ajoutant plusieurs sous-répertoires, par exemple wordpress/sous-répertoire/*. gz, wordpress/sous-répertoire/sous-répertoire/... etc.

L'option la plus simple est celle ci-dessous ... Testez d'abord avec

trouver wordpress/-name "* .gz" -exec ls -lh {} \;

ls -lh ne casse rien, mais vous voyez quels fichiers seraient foutus. Si les fichiers sont corrects, changez ls -lh en gunzip.

trouver wordpress/-name "* .gz" -exec gunzip {} \;

1
adam

Lisez man find, man xargs et procédez comme suit:

find wordpress -type f -iname '*.gz' -print0 |\
    xargs -0 -r -n 1 gunzip

Pour le test, remplacez gunzip par echo gunzip

0
waltinator