Как создать zip с несколькими файлами без подпапок?

Go с kdenlive

sudo apt-get install kdenlive

Он имеет большинство функций, таких как Premiere pro. Поддерживается диапазон битрейтов, частоты кадров и форматов.

11
задан 9 October 2017 в 11:26

9 ответов

В ручном режиме вы можете создать zip-файл и обновить его:

zip myfiles d0
(cd f1; zip -u ../myfiles.zip d1)
(cd f2/f3; zip -u ../../myfiles.zip d4)

Скобки создают подоболочки, а эффект cd длится только в подоболочке, поэтому вы не [!].

Если d1, d2 и т. д. - это фактически файлы, а не сами каталоги, то используйте параметр -j:

-j -junk-paths Хранить только имя сохраненного файла (неактивный путь) и не хранить имена каталогов. По умолчанию zip сохранит полный путь (относительно текущего каталога).
16
ответ дан 22 May 2018 в 17:43

В ручном режиме вы можете создать zip-файл и обновить его:

zip myfiles d0 (cd f1; zip -u ../myfiles.zip d1) (cd f2/f3; zip -u ../../myfiles.zip d4)

Скобки создают подоболочки, а эффект cd длится только в подоболочке, поэтому вы не [!].

Если d1, d2 и т. д. - это фактически файлы, а не сами каталоги, то используйте параметр -j:

-j -junk-paths Хранить только имя сохраненного файла (неактивный путь) и не хранить имена каталогов. По умолчанию zip сохранит полный путь (относительно текущего каталога).
17
ответ дан 18 July 2018 в 05:34

В ручном режиме вы можете создать zip-файл и обновить его:

zip myfiles d0 (cd f1; zip -u ../myfiles.zip d1) (cd f2/f3; zip -u ../../myfiles.zip d4)

Скобки создают подоболочки, а эффект cd длится только в подоболочке, поэтому вы не [!].

Если d1, d2 и т. д. - это фактически файлы, а не сами каталоги, то используйте параметр -j:

-j -junk-paths Хранить только имя сохраненного файла (неактивный путь) и не хранить имена каталогов. По умолчанию zip сохранит полный путь (относительно текущего каталога).
17
ответ дан 24 July 2018 в 18:21

Вы можете использовать find, чтобы получить список файлов и выполнить zip -j myfiles, чтобы упаковать их, игнорируя пути:

find . -name "d[014]" -exec zip -j myfiles {} +

Пример

$ tree
.
├── d0
├── f0
├── f1
│   └── d1
└── f2
    └── f3
        ├── d2
        ├── d3
        └── d4

$ find . -name "d[014]" -exec zip -j myfiles {} +
  adding: d1 (stored 0%)
  adding: d4 (stored 0%)
  adding: d0 (stored 0%)

$ unzip -l myfiles.zip
Archive:  myfiles.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2017-10-09 10:47   d1
        0  2017-10-09 10:48   d4
        0  2017-10-09 10:47   d0
---------                     -------
        0                     3 files

Однако это работает только для файлов, каталоги будут игнорироваться zip -j. Чтобы заставить это работать и для каталогов, скажем, мы хотим упаковать d0, d1 и весь каталог f3 в приведенном выше примере, строка find становится немного более сложной:

$ find . \( -name "d[01]" -o -name "f3" \) -exec sh -c 'p=$(pwd); for i in $0 $@; do cd ${i%/*}; zip -ur "$p"/myfiles ${i##*/}; cd "$p"; done' {} +
        zip warning: /home/dessert/myfiles.zip not found or empty
  adding: d1 (stored 0%)
  adding: f3/ (stored 0%)
  adding: f3/d3 (stored 0%)
  adding: f3/d2 (stored 0%)
  adding: f3/d4 (stored 0%)
  adding: d0 (stored 0%)
$ unzip -l myfiles.zip 
Archive:  myfiles.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2017-10-11 10:18   d1
        0  2017-10-11 10:19   f3/
        0  2017-10-11 10:19   f3/d3
        0  2017-10-11 10:19   f3/d2
        0  2017-10-11 10:19   f3/d4
        0  2017-10-11 10:17   d0
---------                     -------
        0                     6 files
19
ответ дан 22 May 2018 в 17:43

Использование опции -j удалит путь из файла.

zip -j myfiles d0 f1/d1 f2/f3/d4 

ссылка

18
ответ дан 22 May 2018 в 17:43
  • 1
    если какой-либо из путей, которые вы проходите, не являются файлами, а являются каталогами, эти каталоги не будут добавлены в файл zip с опцией -j. – Dan 10 October 2017 в 09:48
  • 2
    @dan - если вы хотите, чтобы все файлы в каталоге с отсутствием пути, а затем zip -j myfiles directory/* – ravery 19 October 2017 в 11:56

Вы можете использовать find, чтобы получить список файлов и выполнить zip -j myfiles, чтобы упаковать их, игнорируя пути:

find . -name "d[014]" -exec zip -j myfiles {} +

Пример

$ tree . ├── d0 ├── f0 ├── f1 │   └── d1 └── f2 └── f3 ├── d2 ├── d3 └── d4 $ find . -name "d[014]" -exec zip -j myfiles {} + adding: d1 (stored 0%) adding: d4 (stored 0%) adding: d0 (stored 0%) $ unzip -l myfiles.zip Archive: myfiles.zip Length Date Time Name --------- ---------- ----- ---- 0 2017-10-09 10:47 d1 0 2017-10-09 10:48 d4 0 2017-10-09 10:47 d0 --------- ------- 0 3 files

Однако это работает только для файлов, каталоги будут игнорироваться zip -j. Чтобы заставить это работать и для каталогов, скажем, мы хотим упаковать d0, d1 и весь каталог f3 в приведенном выше примере, строка find становится немного более сложной:

$ find . \( -name "d[01]" -o -name "f3" \) -exec sh -c 'p=$(pwd); for i in $0 $@; do cd ${i%/*}; zip -ur "$p"/myfiles ${i##*/}; cd "$p"; done' {} + zip warning: /home/dessert/myfiles.zip not found or empty adding: d1 (stored 0%) adding: f3/ (stored 0%) adding: f3/d3 (stored 0%) adding: f3/d2 (stored 0%) adding: f3/d4 (stored 0%) adding: d0 (stored 0%) $ unzip -l myfiles.zip Archive: myfiles.zip Length Date Time Name --------- ---------- ----- ---- 0 2017-10-11 10:18 d1 0 2017-10-11 10:19 f3/ 0 2017-10-11 10:19 f3/d3 0 2017-10-11 10:19 f3/d2 0 2017-10-11 10:19 f3/d4 0 2017-10-11 10:17 d0 --------- ------- 0 6 files
19
ответ дан 18 July 2018 в 05:34

Использование опции -j удалит путь из файла.

zip -j myfiles d0 f1/d1 f2/f3/d4

ссылка

18
ответ дан 18 July 2018 в 05:34

Вы можете использовать find, чтобы получить список файлов и выполнить zip -j myfiles, чтобы упаковать их, игнорируя пути:

find . -name "d[014]" -exec zip -j myfiles {} +

Пример

$ tree . ├── d0 ├── f0 ├── f1 │   └── d1 └── f2 └── f3 ├── d2 ├── d3 └── d4 $ find . -name "d[014]" -exec zip -j myfiles {} + adding: d1 (stored 0%) adding: d4 (stored 0%) adding: d0 (stored 0%) $ unzip -l myfiles.zip Archive: myfiles.zip Length Date Time Name --------- ---------- ----- ---- 0 2017-10-09 10:47 d1 0 2017-10-09 10:48 d4 0 2017-10-09 10:47 d0 --------- ------- 0 3 files

Однако это работает только для файлов, каталоги будут игнорироваться zip -j. Чтобы заставить это работать и для каталогов, скажем, мы хотим упаковать d0, d1 и весь каталог f3 в приведенном выше примере, строка find становится немного более сложной:

$ find . \( -name "d[01]" -o -name "f3" \) -exec sh -c 'p=$(pwd); for i in $0 $@; do cd ${i%/*}; zip -ur "$p"/myfiles ${i##*/}; cd "$p"; done' {} + zip warning: /home/dessert/myfiles.zip not found or empty adding: d1 (stored 0%) adding: f3/ (stored 0%) adding: f3/d3 (stored 0%) adding: f3/d2 (stored 0%) adding: f3/d4 (stored 0%) adding: d0 (stored 0%) $ unzip -l myfiles.zip Archive: myfiles.zip Length Date Time Name --------- ---------- ----- ---- 0 2017-10-11 10:18 d1 0 2017-10-11 10:19 f3/ 0 2017-10-11 10:19 f3/d3 0 2017-10-11 10:19 f3/d2 0 2017-10-11 10:19 f3/d4 0 2017-10-11 10:17 d0 --------- ------- 0 6 files
19
ответ дан 24 July 2018 в 18:21

Использование опции -j удалит путь из файла.

zip -j myfiles d0 f1/d1 f2/f3/d4

ссылка

18
ответ дан 24 July 2018 в 18:21
  • 1
    если какой-либо из путей, которые вы проходите, не являются файлами, а являются каталогами, эти каталоги не будут добавлены в файл zip с опцией -j. – Dan 10 October 2017 в 09:48
  • 2
    @dan - если вы хотите, чтобы все файлы в каталоге с отсутствием пути, а затем zip -j myfiles directory/* – ravery 19 October 2017 в 11:56

Другие вопросы по тегам:

Похожие вопросы: