Я хочу использовать tar и все файлы .php и .html в каталоге и его подкаталогах. Если я использую
tar -cf my_archive *
он сортирует все файлы, которые мне не нужны. Если я использую
tar -cf my_archive *.php *.html
он игнорирует подкаталоги. Как я могу сделать его рекурсивным, но включать только два типа файлов?
-o -name [pattern]
для каждого нового состоянияЕсли вы используете
bash
версию> 4.0, вы можете использовать эксплойт,shopt -s globstar
чтобы быстро с этим справиться:это добавит все файлы .yml, которые начинаются с Алисы, из любого подкаталога и добавит все файлы .json, которые начинаются с Боба, из любого подкаталога.
источник
shopt -s globstar
опция, поэтому ответ правильный и на самом деле лучшийОдин из способов:
Однако при использовании этого метода есть некоторые предостережения:
Обходной путь для них может заключаться в том, чтобы вывести содержимое команды find в файл, а затем использовать параметр «-T, --files-from FILE» для tar.
источник
Это будет обрабатывать пути с пробелами:
источник
Поместите их в файл
Затем используйте файл в качестве входных данных для tar, используйте -I или -T в зависимости от версии tar, которую вы используете
Используйте h для копирования символических ссылок
источник
find ./ -type f -name "*.php" -o -name "*.html" -printf '%P\n' |xargs tar -I 'pigz -9' -cf target.tgz
для многоядерности или только для одного ядра:
find ./ -type f -name "*.php" -o -name "*.html" -printf '%P\n' |xargs tar -czf target.tgz
источник
Используйте команды «find» и «grep», чтобы получить весь путь к файлам .php и .html во всех каталогах и их подкаталогах. Затем передайте информацию о пути в tar для сжатия.
Будьте осторожны с символом "и". Также обратите внимание, что это приведет к достижению предела того, сколько символов ваша оболочка разрешит в командной строке, в отличие от некоторых других ответов.
источник