Я хочу архивировать много папок в дереве каталогов как так
V-
something.txt
folder
folder
g.jpg
h.jar
Когда я пытаюсь архивировать его, это заканчивает создание архива zip v папкой вместо содержания его (подкаталоги и файлы)
Как я могу избежать этого?
Таким образом, если я понимаю правильно, Вы пытаетесь заархивировать файлы & папки в конкретной папке, но без включения корневой папки.
Пример:
/test/test.txt
/test/test2.txt
, где test.txt и test2.txt были бы сохранены в zip, но не / тест /
, Вы могли CD в/test/каталог затем выполнять что-то как,
zip -r filename.zip ./*
, Который создал бы архив в той же папке под названием filename.zip. Или при выполнении его снаружи папки Вы могли работать,
zip -r test.zip test/*
,/* является частью, которая включает только содержание папки вместо всей папки.
Редактирование: OP хотела несколько zip, решение закончило тем, что было определенным взломом, мне любопытно относительно того, существует ли лучший способ сделать это.
for d in */ ; do base=$(basename "$d") ; cd $base ; zip -r $base * ; mv "${base}.zip" .. ; cd .. ; done;
Надежда это помогает.
(cd directory && zip -r ../out.zip .)
Это сохраняет основную оболочку в том же каталоге и только изменении каталога подоболочки, которая умирает после команды.
Используйте -j
или --junk-paths
опция в Вашей команде zip.
От страница справочника zip:
-j --junk-paths Store just the name of a saved file (junk the path), and do not store directory names. By default, zip will store the full path (relative to the current directory).
Как насчет этой команды?
$ cd somedir ; zip -r ../zipped.zip . * ; cd ..
Другие ответы меня не удовлетворили, потому что они либо включали всю структуру каталогов в zip, либо включали уродливый ../../../../file.zip
путь в команду zip
.
В приведенном ниже подходе используется стандартный фрагмент кода для получения текущего каталога (каталога, в котором находится этот скрипт) в качестве абсолютного пути.
#!/bin/bash
dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
(cd "path/to/some/deep/directory/" && zip -r "${dir}/file.zip" ./*)
cd `dirname path/to/archive` && zip -rq $OLDPWD/arhive.zip . && cd -
Это работает не только с плоским деревом (например, -j
), и вы можете указать любой каталог (не только дочерний)