Tar: éviter l'archivage de fichiers plus grands que certaines tailles


11

Je souhaite archiver des fichiers (avec tar) d'une taille inférieure à 3 Mo. Mais je souhaite également conserver les répertoires dans lesquels ces fichiers existent. (donc je ne peux pas utiliser la findcommande). Je veux juste éviter les fichiers dont la taille est supérieure à 3 Mo. Comment cela peut-il être fait?


2
Alors pourquoi ne pouvez-vous pas findréutiliser?
Ignacio Vazquez-Abrams, le

La commande find peut-elle conserver les répertoires intacts?
nixnotwin

Réponses:


23

Plus simple que vous ne le pensez:

$ tar cf small-archive.tar /big/tree --exclude-from <(find /big/tree -size +3M)

Sur une note semi-liée (relative à votre déclaration que vous ne pouvez pas utiliser find) pour obtenir une liste de tous les fichiers (y compris les répertoires) sous un chemin moins les fichiers supérieurs à 3 Mo, utilisez:

$ find . -size -3M -o -type d

Vous pourriez alors faire:

$ tar cf small-archive.tar --no-recursion --files-from <(find /big/tree -size -3M -o -type d)

Mais je préfère le premier car il est plus simple, exprime clairement ce que vous voulez et conduira à moins de surprises.


2
+1 Quoi! Une personne polie et sympathique sur SF?!?
Jongosi

1
+1 mêmes sédiments. trop de trolls égoïstes sur SF récemment.
Patoshi パ ト シ

* sentiments: P :)
MikeyB

1

Si le nom de fichier contient des crochets, dans certains systèmes, vous devez les exclure explicitement. Par exemple

$ mkdir test
$ echo "abcde123456" > ./test/a[b].txt
$ echo "1" > ./test/a1.txt
$ ls -la ./test
total 16
drwxrwxr-x 2 user user 4096 Jan 10 16:38 .
drwx------ 4 user user 4096 Jan 10 16:38 ..
-rw-rw-r-- 1 user user    2 Jan 10 16:38 a1.txt
-rw-rw-r-- 1 user user   12 Jan 10 16:38 a[b].txt
$ tar -zcvpf a.tar.gz ./test
./test/
./test/a[b].txt
./test/a1.txt
$ tar -zcvpf a3.tar.gz ./test --exclude-from <(find ./test -type f -size +3c)
./test/
./test/a[b].txt
./test/a1.txt
$ tar -zcvpf ax.tar.gz ./test --exclude-from <(find ./test -type f -size +3c) --exclude '*\[*'
./test/
./test/a1.txt

0

Si vous essayez de le faire sur un serveur via SSH, cela ne fonctionnera pas à cause de cela . Pour contourner ce problème, vous pouvez utiliser des tuyaux et des xargs:

find /path/to/dir -type f -size -3M | xargs tar cf archive.tar
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.