Тар: уникайте архівування файлів, більших за певний розмір


11

Я хочу архівувати файли (з дьогтем) розміром менше 3 Мб. Але я також хочу зберегти каталоги, в яких ці файли існують. (тому я не можу використовувати findкоманду). Я просто хочу уникати файлів розміром понад 3 Мб. Як це можна зробити?


2
То чому ви не можете використовувати findзнову?
Ігнасіо Васкес-Абрамс

Чи може команда find зберегти каталоги недоторканими?
nixnotwin

Відповіді:


23

Простіше, ніж ви думаєте:

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

У напівзв’язаній примітці (що стосується вашої заяви про те, що ви не можете використовувати знайти), щоб отримати список усіх файлів (включаючи каталоги) під контуром мінус файлів, більшим за 3MiB, використовуйте:

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

Потім ви можете зробити:

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

Але я вважаю за краще перший, оскільки він простіший, чітко виражає те, що ви хочете, і призведе до менш сюрпризів.


2
+1 Що! Ввічлива, доброзичлива людина на СФ?!?
Йонгосі

1
+1 однакові осади. останнім часом занадто багато егоїстичних тролів.
Патоші パ ト シ

* настрої: P :)
MikeyB

1

Якщо ім'я файлу містить квадратні дужки, в деяких системах їх потрібно явно виключити. Наприклад

$ 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, він не буде працювати з - за цього . Щоб вирішити це, ви можете використовувати труби та xargs:

find /path/to/dir -type f -size -3M | xargs tar cf archive.tar
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.