Ответ 1
find ./someDir -name "*.php" -o -name "*.html" | tar -cf my_archive -T -
Я хочу tar и все .php и .html файлы в каталоге и его подкаталогах. Если я использую
tar -cf my_archive *
он затачивает все файлы, которые я не хочу. Если я использую
tar -cf my_archive *.php *.html
он игнорирует подкаталоги. Как я могу сделать его tar рекурсивно, но включать только два типа файлов?
find ./someDir -name "*.php" -o -name "*.html" | tar -cf my_archive -T -
Один из способов:
tar -cf my_archive.tar $( find -name "*.php" -or -name "*.html" )
Однако существуют некоторые предостережения с этим методом:
Обходной путь к ним может заключаться в том, чтобы выводить содержимое команды find в файл, а затем использовать параметр -T, --files-from FILE для tar.
Чтобы сжать несколько файлов с разными шаблонами, мы могли бы разделить их с пространством и добавить их все в файл gz, например:
tar -czvf deploy.tar.gz **/Alice*.yml **/Bob*.json
это добавит все .yml файлы, которые начинаются с Alice из любого подкаталога, и добавьте все .json файлы, которые начинаются с Bob из любого подкаталога.
Это будет обрабатывать пути с пробелами:
find ./ -type f -name "*.php" -o -name "*.html" -exec tar uvf myarchives.tar {} +
tar -cf my_archive `find ./ | grep '.php\|.html'`
Используйте "find" и "grep", чтобы получить весь путь к файлам .php и .html во всех каталогах и его подкаталогах. Затем передайте эту информацию пути в tar для сжатия.
Пожалуйста, будьте осторожны с этими символами `и '. Также обратите внимание, что это превысит количество символов, которые ваша оболочка разрешит в командной строке, в отличие от некоторых других ответов.