trouver avec xargs et tar
J'ai le texte suivant que je veux faire:
find . -maxdepth 6 ( -name *.tar.gz -o -name bediskmodel -o -name src -o -name ciao -o -name heasoft -o -name firefly -o -name starlink -o -name Chandra ) -prune -o -print| tar cvf somefile.tar --files-from=-
c'est à dire d'exclure un tas de trucs, regarde seulement à 6 sous-dossiers de la profondeur, et puis une fois que l'élagage est effectué, le goudron et le reste.
Pas dur. Le peu avant le pipe (|) fonctionne à 100%. Si j'exclus le goudron, puis-je obtenir ce que je suis après (à l'écran). Mais une fois que je comprennent le tuyau, et le goudron, il goudrons de tout, y compris toutes les choses que je viens de exclu de le trouver.
J'ai essayé un certain nombre de différentes itérations:
-print0 | xargs -0 goudron fvr somefile.tar
-print0 | xargs -0 goudron fvr somefile.tar --null --files-from=-
-print0 | tar cvf somefile.tar --null -T -
Donc ce que je fais mal? J'ai fait cela avant, mais maintenant, c'est juste de me donner des cheveux gris.
source d'informationauteur user1534692 | 2012-07-18
Vous devez vous connecter pour publier un commentaire.
Ce qui a fonctionné pour moi est une combinaison de l'impression drapeau pour trouver, et ensuite --files-from sur la commande tar. Dans mon cas, j'ai besoin de goudron jusqu'à 5000+ les fichiers journaux, mais juste en utilisant xargs seulement m'a donné 500 fichiers dans le fichier résultant.
Vous avez "--files-from=-", quand vous voulez juste "--files-from -" et puis je pense que vous avez besoin d'un - devant de la cvf, comme la suivante.
Je me souviens de faire quelque chose comme ci-dessous de la ligne de goudron tas de fichiers. J'étais spécifiques sur les fichiers que je veux groupe, alors j'ai couru à quelque chose comme ceci
Dans votre cas, je me demande pourquoi vous faites "-o" avant l'impression qui semble être compris de tout nouveau
Si vous trouvez est de retour répertoires, puis ceux-ci seront passés au goudron, et le contenu sera inclus, indépendamment de l'exclusion de votre commande rechercher.
Donc, je pense que vous avez besoin d'inclure un "type f" dans le trouver.
- Je utiliser une combinaison des deux approches ci-dessus - à la sauvegarde de leur journée de travail, je fais ceci: rm-rf nouveau.tgz; trouver . -type f -mtime 0 | xargs tar cvf nouveau.tgz;
À l'utilisation de fichiers de sans option a été le seul à le faire fonctionner pour moi. Toutes les autres options inclus tous les fichiers dans le répertoire plutôt que de ma liste générée.
C'était ma solution: