Tar: evite el archivo de archivos de más de cierto tamaño

11

Quiero archivar archivos (con tar) que tengan un tamaño inferior a 3 MB. Pero también quiero retener los directorios en los que existen esos archivos. (entonces no puedo usar el findcomando). Solo quiero evitar los archivos que tienen un tamaño superior a 3 MB. ¿Cómo se puede hacer esto?

nixnotwin
fuente
2
Entonces, ¿por qué no puedes usar de findnuevo?
Ignacio Vazquez-Abrams
¿Puede el comando find mantener los directorios intactos?
nixnotwin

Respuestas:

23

Más simple de lo que piensas:

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

En una nota semi-relacionada (relacionada con su declaración de que no puede usar find) para obtener una lista de todos los archivos (incluidos los directorios) en una ruta menos archivos de más de 3MiB, use:

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

Entonces podrías hacer:

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

Pero preferiría el primero, ya que es más simple, expresa claramente lo que quieres y generará menos sorpresas.

MikeyB
fuente
2
+1 ¡Qué! ¿Una persona amable y educada en SF?
Jongosi
1
+1 mismos sedimentos. demasiados trolls egoístas en SF últimamente.
Patoshi パ ト シ
* sentimientos: P :)
MikeyB
1

Si el nombre de archivo contiene corchetes, en algunos sistemas, debe excluirse explícitamente. Por ejemplo

$ 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
Chen Deng-Ta
fuente
0

Si está intentando hacer esto en un servidor a través de SSH, no funcionará debido a esto . Para solucionarlo, puede usar tuberías y xargs:

find /path/to/dir -type f -size -3M | xargs tar cf archive.tar
Aullido
fuente