Відповіді:
Тож якщо я правильно розумію, ви намагаєтесь архівувати файли та папки в певній папці, але не включаючи кореневу папку.
Приклад:
/test/test.txt
/test/test2.txt
де test.txt і test2.txt зберігатимуться в zip, але не / test /
Ви можете ввійти в каталог / test /, а потім запустити щось на зразок,
zip -r filename.zip ./*
Який створив би архів у тій же папці з ім'ям filename.zip. Або якщо ви запускаєте його поза папкою, яку ви можете запустити,
zip -r test.zip test/*
/ * - це частина, що включає лише вміст папки, а не всю папку.
Редагувати: ОП хотів декількох блискавок, рішення в кінцевому підсумку було трохи злому, мені цікаво, чи є кращий спосіб зробити це.
for d in */ ; do base=$(basename "$d") ; cd $base ; zip -r $base * ; mv "${base}.zip" .. ; cd .. ; done;
for d in */ ; do base=$(basename "$d") ; zip -rj "${base}.zip" "$d" ; done;
zip -r test.zip test/*
не працює. чи є правильний спосіб досягти цього за межами каталогу?
Використовуйте -j
або --junk-paths
параметр у вашій команді 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 ..
cd
. Сподівався, що існує спосіб точніше вказати збережений шлях.
Сподіваюся, це допомагає.
(cd directory && zip -r ../out.zip .)
Він зберігає основну оболонку в тому самому каталозі і лише змінюючи каталог підрозділу, який гине після команди.