Надсилати всі файли / директорії в каталог, окрім прихованих?


4

Як я можу зробити ZIP всі файли і підкаталоги в каталозі mydir, крім всіх тих файлів / dirs, які починаються з a .*?

Команда:

zip -r mydir.zip mydir/

... буде включати все. Наприклад, якщо у мене є:

mydir/foo
mydir/bar
mydir/.hello

я хотів би foo і бар для включення mydir, але ні .Здрастуйте .

Як це можна зробити?

Відповіді:


6

Це працює для мене:

zip -r mydir.zip mydir -x "*/.*"

@Joe Internet, @Dariusz: звичайні шаблони оболонок не працюватимуть належним чином, оскільки zip збігається з повним контуром + ім'я файлу внутрішньо (як пояснює zip manual ...;))


1
Claeys - мій приклад workd для мене, але, щоб бути справедливим, я використав Ch Shell (включає zip) під Win7. Я записав компакт-диск у тестовий каталог і використав 'zip -r test.zip ./ -x. *. *' (Мінус одинарні лапки). Якщо я використовую "zip -r mydir.zip mydir -x" /. "" (за вирахуванням одиничних лапок), не виключає прихований файл у тестовому каталозі. Я припускаю, що це призведе до відмінностей у оболонках, які використовуються для тестування.
Joe Internet


1

Якщо ви віддаєте перевагу більше комплексна фільтрація можливості, знайти є гарним інструментом:

find mydir/ -! -name ".hello" -print | zip mydir -@

Веселіться з 'find'.


1

Наступний підхід працює для цього типу дерева каталогів:

$ tree .
.
├── adir1
│   ├── afile1
│   ├── afile2
│   ├── afile3
│   └── afile4.txt
├── adir2
│   ├── afile1
│   ├── afile2
│   ├── afile3
│   └── afile4.txt
├── adir3
│   ├── afile1
│   ├── afile2
│   ├── afile3
│   └── afile4.txt
├── afile1
├── afile2
├── afile3
├── foo.test

Це було рішення, яке працювало для цього сценарію (я вважаю, що це більш загальний випадок).

 $ find . -type f -not -path '*/\.*' -exec zip -r test.zip {} +

Приклад

$ find . -type f -not -path '*/\.*' -exec zip -r test.zip {} +
updating: adir1/afile1 (stored 0%)
updating: adir1/afile1.zip (stored 0%)
updating: adir1/afile2 (stored 0%)
updating: adir1/afile3 (stored 0%)
updating: adir1/afile4.txt (stored 0%)
updating: adir2/afile1 (stored 0%)
updating: adir2/afile2 (stored 0%)
updating: adir2/afile3 (stored 0%)
updating: adir2/afile4.txt (stored 0%)
updating: adir3/afile1 (stored 0%)
updating: adir3/afile2 (stored 0%)
updating: adir3/afile3 (stored 0%)
updating: adir3/afile4.txt (stored 0%)
updating: afile1 (stored 0%)
updating: afile2 (stored 0%)
updating: afile3 (stored 0%)
updating: foo.test (deflated 87%)


0

Коротше, і використовує особливості глобусів:

zip -r mydir.zip mydir/*

(файли не входять до * шаблону)

Зауважте, що каталог "mydir /" не може бути включений до шляхів файлів у результуючому поштовому файлі, тому це трохи змінить вихідний файл. Можливо, вам доведеться змінити процес вилучення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.