Я пытаюсь создать сжатый архив, содержащий все файлы PDF, которые существуют в одном из моих каталогов. Структура каталогов должна быть сохранена. Пустые каталоги не нужны, но мне действительно все равно, если они там есть.
Например, скажем, у меня был каталог, который выглядел так:
dir
dir/subdir1
dir/subdir1/subsubdir1/song.mp3
dir/subdir2
dir/subdir2/subsubdir1
dir/subdir2/subsubdir1/document.pdf
dir/subdir2/subsubdir1/another-song.mp3
dir/subdir2/subsubdir1/top-ten-movies.txt
dir/subdir3
dir/subdir3/another-document.pdf
После запуска команды я хотел бы dir.tar.gz
содержать это:
dir
dir/subdir2
dir/subdir2/subsubdir1
dir/subdir2/subsubdir1/document.pdf
dir/subdir3
dir/subdir3/another-document.pdf
Возможный?
find docs \( -iname '*.pdf' -o -iname '*.mp3' \) -printf '"%p"\n' | xargs tar czf docs-media.tar.gz
\'"
(ошибка xargs), и не будет работать, если слишком много имен файлов (ошибка ядра).-printf '"%p"\n'
позаботится часть (по крайней мере, для меня).С bash ≥4 или zsh и GNU tar:
Это может не сработать, если у вас очень большое количество PDF-файлов и слишком длинная командная строка. Тогда вам понадобится более сложное решение на основе поиска (опять же, с использованием GNU tar):
В качестве альтернативы (и переносимо) вы можете создать архив с pax .
Первый
-s
говорит включить все.pdf
файлы, не меняя их имени. Второй-s
говорит переименовать все остальные файлы в пустое имя, что фактически означает не включать их в архив.источник
**
; Я даже не догадывался, что у bash 4 это сейчас есть