Tar: belirli boyuttan daha büyük dosyaların arşivlenmesinden kaçının


11

Boyutu 3 MB'ın altında olan dosyaları (katranlı) arşivlemek istiyorum. Ancak bu dosyaların bulunduğu dizinleri de saklamak istiyorum. (yani findkomutu kullanamıyorum ). Sadece boyutu 3 MB'ın üzerinde olan dosyalardan kaçınmak istiyorum. Bu nasıl yapılabilir?


2
Öyleyse neden findtekrar kullanmıyorsun ?
Ignacio Vazquez-Abrams

Find komutu dizinleri olduğu gibi tutabilir mi?
nixnotwin

Yanıtlar:


23

Düşündüğünüzden daha basit:

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

3MiB'den daha büyük dosyalar eksi bir yol altındaki tüm dosyaların (dizinler dahil) bir listesini almak için (find kullanamayacağınız ifadenizle ilgili) yarı ilgili bir notta şunu kullanın:

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

Daha sonra şunları yapabilirsiniz:

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

Ama ilkini daha basit olduğu için tercih ederim, ne istediğinizi açıkça ifade eder ve daha az sürprizle sonuçlanır.


2
+1 Ne! SF kibar, samimi bir insan?!?
Jongosi

1
+1 aynı sediman. Son zamanlarda SF üzerinde çok fazla bencil trol.
Patoshi シ ト シ

* duyguları: P :)
MikeyB

1

Dosya adı köşeli parantez içeriyorsa, bazı sistemlerde açıkça hariç tutmanız gerekir. Örneğin

$ 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

SSH üzerinden bir sunucuya bunu çalışıyorsanız, bunun nedeni eseri olmayacak bu . Geçici çözüm için, boruları ve xargs kullanabilirsiniz:

find /path/to/dir -type f -size -3M | xargs tar cf archive.tar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.