Très bien, problème si simple ici. Je travaille sur un simple code de sauvegarde. Cela fonctionne bien sauf si les fichiers contiennent des espaces. Voici comment je trouve des fichiers et les ajoute à une archive tar:
find . -type f | xargs tar -czvf backup.tar.gz
Le problème est lorsque le fichier a un espace dans le nom car tar pense que c'est un dossier. En gros, existe-t-il un moyen d'ajouter des citations autour des résultats de find? Ou une autre façon de résoudre ce problème?
find ... | xargs ...
est d'utiliser le -print0 / -0 paramètre sur chaque:find -print0 ... | xargs -0 ...
. Cela entraînera la séparation des noms de fichiers par un caractère nul, ce qui signifie que vous pouvez avoir des espaces ou des retours à la ligne ou d'autres choses étranges dans vos noms de fichiers et cela fonctionnera toujours.Réponses:
Utilisez ceci:
Ce sera:
tar -c
avec lexargs
fera lorsque vous avez un grand nombre de fichiersRegarde aussi:
la source
-print0
s'applique uniquement à la dernière expression. Par exemplefind . \( -type f -o -name '*.c' \) -print0 | ...
c:\cygwin\bin\find . -regextype posix-egrep -regex '.*(sln^|vcxproj^|filters)$' -print0 | c:\cygwin\bin\tar -cvf MS_Projects.tar --null -T -
-T
, et cela signifie lire les noms de fichiers à partir de l'entrée standard: Si vous donnez un seul tiret comme nom de fichier pour `--files-from ', (c'est-à-dire que vous spécifiez soit --files-from = - ou -T -), puis les noms de fichiers sont lus à partir de l'entrée standardIl pourrait y avoir une autre façon de réaliser ce que vous voulez. Fondamentalement,
Puis tar avec l'option -T qui lui permet de prendre une liste d'emplacements de fichiers (celui que vous venez de créer avec find!)
la source
Essayez de courir:
la source
Pourquoi pas:
Bien sûr, il est intelligent d'utiliser find puis xargs, mais vous le faites à la dure.
Mise à jour: Porges a commenté avec une option de recherche qui, à mon avis, est une meilleure réponse que ma réponse, ou l'autre:
find -print0 ... | xargs -0 ....
la source
xargs ... tar c ...
écrasera la première archive créée si la liste des fichiers est trop longue etxargs
s'exécuteratar
une deuxième fois! Pour éviter l'écrasement, vous pouvez utiliser,xargs -x
mais l'archive pourrait être incomplète. Une alternative pourrait être d'abordtar c ...
, puis éventuellement à plusieurs reprisestar r ...
. (ma contribution à la fiabilité :)Si vous avez plusieurs fichiers ou répertoires et que vous souhaitez les compresser dans un
*.gz
fichier indépendant , vous pouvez le faire. Optionnel-type f -atime
Cela va compresser
à
la source
Pourquoi ne pas essayer quelque chose comme ça:
tar cvf scala.tar `find src -name *.scala`
la source
Une autre solution comme vu ici :
la source
Ajouter un commentaire à la publication de @Steve Kehlet mais nécessiterait 50 représentants (RIP).
Pour tous ceux qui ont trouvé ce message grâce à de nombreux googlages, j'ai trouvé un moyen non seulement de trouver des fichiers spécifiques selon une plage de temps, mais également de NE PAS inclure les chemins relatifs OU les espaces blancs qui provoqueraient des erreurs de goudronnage. (MERCI BEAUCOUP STEVE.)
.
répertoire relatif-name "*.pdf"
recherchez des fichiers PDF (ou n'importe quel type de fichier)-type f
le type à rechercher est un fichier-mtime 0
rechercher les fichiers créés au cours des dernières 24 heures-printf "%f\0"
Régulier-print0
OU-printf "%f"
ne fonctionnait pas pour moi. Depuis les pages de manuel:-czvf
créer une archive, filtrer l'archive via gzip, lister les fichiers traités de manière verbale, nom de l'archiveEdit 2019-08-14: Je voudrais ajouter que j'ai également pu utiliser essentiellement la même commande dans mon commentaire, en utilisant simplement tar lui-même:
Nécessaire
--ignore-failed-read
au cas où il n'y aurait pas de nouveaux PDF pour aujourd'hui.la source
La meilleure solution semble être de créer une liste de fichiers puis d'archiver les fichiers car vous pouvez utiliser d'autres sources et faire autre chose avec la liste.
Par exemple, cela permet d'utiliser la liste pour calculer la taille des fichiers archivés:
la source