J'ai la structure de répertoire suivante:
base/
files/
archives/
scripts/
Je veux un script à exécuter à partir scripts/
, les fichiers Compresser qui correspondent results.*.log
à files/
en gzip tar archive dans archives/
.
J'essaie la commande suivante:
tar czfC ../archives/archive.tar.gz ../files results.*.log
Mais je reçois
tar: results.*.log: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
Tandis que
tar czfC ../archives/archive.tar.gz ../files results.a.log
fonctionne comme prévu. Aussi
tar czf ../archives/archive.tar.gz ../files/results.*.log
fonctionne comme je le voudrais, sauf qu'il ajoute le préfixe files/
au fichier et émet également un avertissement:
tar: Removing leading `../' from member names
Donc, ma conclusion est que la tar
globalisation ne fonctionne pas correctement lorsque vous utilisez l' -C
option. Des conseils sur la façon dont je fais ce travail de manière simple?
cd
cela ne se produise.&&
est comme;
ou newline, il sépare deux commandes. C'est comme dire qu'après l'exécutioncd
, n'importe quel glob développerait les fichiers dans le répertoire précédent.Il n'y a pas de "tar globbing", le globbing se fait par le shell. Et le shell n'a aucune idée de qui
tar -C somedir
fera son travailsomedir
, tous les globs sont développés dans le répertoire courant.la source
results.a.log
existe dans le répertoire à partir duquel le script est exécuté, cela fonctionne. Mais je ne comprends pas pourquoi cela se produit, car-C
signifie répertoire de changement, donc le répertoire actuel devrait être celui avecresults.a.log
. Je ne peux pas accepter votre réponse car vous n'offrez pas de solution.tar
programme, qui change de répertoire beaucoup plus tard. Impossible de "résoudre" votre problème, désolé. La seule solution consiste à vous déplacer dans le répertoire où vous souhaitez effectuer une globalisation, ou à effectuer la globalisation dans le répertoire et à enregistrer ses résultats dans un fichier ou une variable.Vous pouvez laisser
find
faire le globbing et omettre l'option 'change directory'tar
en supprimant lefiles/
préfixe avant de créer le fichier tar.L'
--no-recursion
option totar
est facultative car aucun répertoire ne sera archivé.la source
J'ai finalement utilisé
la source
Pour ce faire, écrivez quelque chose comme ceci:
la source
Ce n'est pas du goudron qui fait le globbing, c'est la coquille. Vous dites d'abord au shell de faire un globbing, puis dites à tar de changer de répertoire. Puisque tar reçoit une liste de noms de fichiers par rapport aux répertoires d'origine, cela ne fonctionne pas.
La solution la plus simple est de loin de laisser le shell changer le répertoire. Interactivement:
Dans un script:
ou
la source