Zip-папки без родительской папки - PullRequest
0 голосов
/ 16 мая 2018

Прежде всего, я прочитал множество постов на эту тему, но ни один из них не помог, например,

Архивирование без создания родительской папки Unix zip подкаталог, не включая родительский каталог

Вот что я хочу. У меня следующая структура папок:

- root
-- subroot
--- subsubroot
---- file1.foo
---- file2.foo
---- file3.foo
---- file4.foo

А результат архивированного файла должен быть при распаковке

file1.foo
file2.foo
file3.foo
file4.foo

Суть в том, что file*.foo - это просто пакеты, то есть, в основном, сами папки, поэтому я попытался использовать опцию -j в сочетании с моей рекурсивной опцией (-r), но затем я просто получил плоскую иерархию всех файлов.

Моя текущая команда оболочки выглядит так:

find root/subroot/subsubroot -name '*.foo' | grep -v somestring | xargs -I % zip -r foos.zip %

Однако результат этого будет точно таким же, как и исходная структура со всеми родительскими папками.

Мне не обязательно использовать команду zip, но полученный файл должен быть zip.

1 Ответ

0 голосов
/ 16 мая 2018

Ваша команда почти верна, хотя вам не нужно использовать опцию -I.

Структура каталогов :

.
└── root
    └── subroot
        └── subsubroot
            ├── foo1
            │   └── foo1.pkg
            ├── foo2
            │   └── foo2.pkg
            ├── foo3
            │   └── foo3.pkg
            ├── fooA.pkg
            ├── fooB.pkg
            ├── fooC.pkg
            └── nope.pkg

Команда

find root/subroot/subsubroot -name '*.pkg' | grep -v "nope" | xargs zip -jr foo 

Результирующий foo.zip :

fooA.pkg
fooB.pkg
fooC.pkg
foo1.pkg
foo2.pkg
foo2.pkg

Есть одна оговорка.

Если у вас есть этот тип структуры каталогов, вы получите ошибку:

.
└── root
    └── subroot
        └── subsubroot
            ├── foo1
            │   └── foo1.pkg
            ├── foo2
            │   └── foo2.pkg
            ├── foo3
            │   └── fooC.pkg
            ├── fooA.pkg
            ├── fooB.pkg
            ├── fooC.pkg
            └── nope.pkg 

Error

zip warning:   first full name: root/subroot/subsubroot/foo3/fooC.pkg
               second full name: root/subroot/subsubroot/fooC.pkg
               name in zip file repeated: fooC.pkg
               this may be a result of using -j

Вам следует помнить, что файлы / пакеты в подкаталогах не имеют одинаковых имен файлов, в противном случае вы столкнетесь с проблемами, как показано fooC.pkg. Предполагается, что это не так, поскольку вы пытаетесь создать плоский архив.

...