Подтвердить что ты не робот

Как смонтировать определенные типы файлов во всех подкаталогах?

Я хочу tar и все .php и .html файлы в каталоге и его подкаталогах. Если я использую

tar -cf my_archive *

он затачивает все файлы, которые я не хочу. Если я использую

tar -cf my_archive *.php *.html

он игнорирует подкаталоги. Как я могу сделать его tar рекурсивно, но включать только два типа файлов?

4b9b3361

Ответ 1

find ./someDir -name "*.php" -o -name "*.html" | tar -cf my_archive -T -

Ответ 2

Один из способов:

tar -cf my_archive.tar $( find -name "*.php" -or -name "*.html" )

Однако существуют некоторые предостережения с этим методом:

  • Это не удастся, если в них есть файлы или каталоги с пробелами, а
  • он будет терпеть неудачу, если будет так много файлов, что максимальная длина командной строки будет заполнена.

Обходной путь к ним может заключаться в том, чтобы выводить содержимое команды find в файл, а затем использовать параметр -T, --files-from FILE для tar.

Ответ 3

Чтобы сжать несколько файлов с разными шаблонами, мы могли бы разделить их с пространством и добавить их все в файл gz, например:

tar -czvf deploy.tar.gz **/Alice*.yml **/Bob*.json

это добавит все .yml файлы, которые начинаются с Alice из любого подкаталога, и добавьте все .json файлы, которые начинаются с Bob из любого подкаталога.

Ответ 4

Это будет обрабатывать пути с пробелами:

find ./ -type f -name "*.php" -o -name "*.html" -exec tar uvf myarchives.tar {} +

Ответ 5

tar -cf my_archive `find ./ | grep '.php\|.html'`

Используйте "find" и "grep", чтобы получить весь путь к файлам .php и .html во всех каталогах и его подкаталогах. Затем передайте эту информацию пути в tar для сжатия.

Пожалуйста, будьте осторожны с этими символами `и '. Также обратите внимание, что это превысит количество символов, которые ваша оболочка разрешит в командной строке, в отличие от некоторых других ответов.