Как мне сжать целое дерево папок в Unix, но только определенные файлы? - PullRequest
42 голосов
/ 11 июля 2009

Я застрял в маленькой проблеме с командной строкой Unix.

У меня есть папка на веб-сайте (4 ГБ), мне нужно взять копию, но только файлы .php, .html, .js и .css (всего пару сотен КБ)

В идеале я думаю, что есть способ сжать или сжать всю папку, но получить только определенные расширения файлов, сохранив при этом структуру подпапок. Возможно ли это, и если да, то как?

Я попробовал сделать целый zip, затем пройти и исключить некоторые файлы, но это показалось немного чрезмерным.

Я новичок в Unix.

Любые идеи будут с благодарностью.

Ответы [ 6 ]

64 голосов
/ 11 июля 2009

Переключитесь в папку сайта, затем запустите

zip -R foo '*.php' '*.html' '*.js' '*.css' 

Вы также можете запустить это из-за пределов папки сайта:

zip -r foo website_folder -i '*.php' '*.html' '*.js' '*.css'
20 голосов
/ 11 июля 2009

Вы можете использовать find и grep для генерации списка файлов, а затем передать его в zip

, например

find . | egrep "\.(html|css|js|php)$" | zip -@ test.zip

(-@ говорит zip прочитать список файлов из стандартного ввода)

7 голосов
/ 11 июля 2009

Вот как мне удалось это сделать, но мне также нравится версия ghostdog74.

tar -czvf archive.tgz `find  test/ | egrep ".*\.html|.*\.php"`

Вы можете добавить дополнительные расширения, добавив их в регулярное выражение.

4 голосов
/ 11 июля 2009

Мне понравился ответ Ника, но, поскольку это сайт программирования, почему бы не использовать Ant для этого.:)

Затем вы можете ввести параметр для архивирования файлов различных типов.

http://ant.apache.org/manual/Tasks/zip.html

3 голосов
/ 11 июля 2009

вы можете использовать find (GNU), чтобы найти все ваши файлы php, html и т.д.

find /path -type f \( -iname "*.php" -o -iname "*.css" -o -iname "*.js" -o -iname "*.ext" \) -exec tar -r --file=test.tar "{}" +;

после этого вы можете заархивировать

1 голос
/ 11 июля 2009

Вы можете написать сценарий оболочки для копирования файлов на основе шаблона / выражения в новую папку, архивирования содержимого, а затем удаления папки. Теперь, что касается действительного синтаксиса, оставлю это вам: D.

...