Tar: hindari pengarsipan file yang lebih besar dari ukuran tertentu

11

Saya ingin mengarsipkan file (dengan tar) yang berukuran di bawah 3 MB. Tetapi saya juga ingin mempertahankan direktori di mana file-file itu ada. (jadi saya tidak bisa menggunakan findperintah). Saya hanya ingin menghindari file yang ukurannya di atas 3 MB. Bagaimana ini bisa dilakukan?

nixnotwin
sumber
2
Jadi mengapa Anda tidak bisa menggunakan findlagi?
Ignacio Vazquez-Abrams
Bisakah perintah find menjaga direktori tetap utuh?
nixnotwin

Jawaban:

23

Lebih sederhana dari yang Anda pikirkan:

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

Pada catatan semi-terkait (terkait dengan pernyataan Anda yang tidak dapat Anda gunakan temukan) untuk mendapatkan daftar semua file (termasuk direktori) di bawah jalur minus file yang lebih besar dari 3MiB, gunakan:

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

Anda kemudian dapat melakukan:

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

Tapi saya lebih suka yang pertama karena lebih sederhana, dengan jelas mengungkapkan apa yang Anda inginkan dan akan menghasilkan lebih sedikit kejutan.

MikeyB
sumber
2
+1 Apa! Orang yang sopan, ramah di SF?!?
Jongosi
1
+1 sedimen yang sama. terlalu banyak troll egois di SF belakangan ini.
Patoshi パ ト シ
* sentimen: P :)
MikeyB
1

Jika nama file berisi tanda kurung siku, dalam beberapa sistem, perlu dikecualikan secara eksplisit. Sebagai contoh

$ 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
sumber
0

Jika Anda mencoba melakukan ini di server melalui SSH, itu tidak akan berhasil karena ini . Untuk mengatasinya, Anda dapat menggunakan pipa dan xarg:

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