Recherchez des fichiers dans un dossier, compressez-les dans un emplacement cible sans structure de répertoire dans le terminal Linux

1

Dans le terminal Linux: Je suis dans un dossier, /home/user/origlocation/je dois aller dans un dossier ../source/et trouver tous les fichiers avec le nom test*.txt. Ensuite, j’ai besoin de compresser (tar.gz) ces fichiers à un emplacement /home/user/target/particulier, sans la structure de répertoires du fichier tar (j’ai seulement besoin des noms de fichiers des résultats tar extraits immédiatement). S'il vous plaît aider.

makkhi
la source

Réponses:

-1

Cela devrait marcher

cd ../source && tar -cvf foo.tar test*.txt;
mv ./foo.tar /home/user/target/ && cd ../origlocation
BigOmega
la source
Merci. Je voulais une approche différente, mais cela fonctionne très bien.
Makkhi
2

En supposant que vous ayez un nouveau-né tar, vous pouvez faire ceci:

find ../source -name 'test*.txt' | tar --transform='s,.*/,,' -cvzf /home/user/target/test-txt.tar.gz -T-

Cela fonctionne en utilisant findpour générer une liste de fichiers dans le répertoire cible et ci-dessous. tarlit ensuite cette liste dans le tube comme stdinsuit (en utilisant "-T-"), puis crée l'archive souhaitée (y compris la compression avec gzip), en transformant les chemins de fichiers de sortie à l'aide de l' sedexpression, qui supprime tous les principaux composants du répertoire.

Si en fait tous vos fichiers sont dans un seul répertoire, c'est encore plus simple:

(cd ../source; tar -cvzf /home/user/target/test-txt.tar.gz test*.txt)

Cela fonctionne en utilisant un sous-shell pour vous déplacer dans le répertoire cible, mais écrit toujours l'archive tar dans l'emplacement final requis. Aucun composant de répertoire n'est inclus car vous utilisez un environnement de shell simple pour sélectionner les fichiers du répertoire de travail).

Uditha Desilva
la source