Скопіюйте файл, не включаючи батьківський каталог


12

У мене папка, яка містить кілька файлів

папку

  • artifact1.app
  • artifact2.ext2
  • artifact3.ext3
  • ...

Моя мета - зашпаркувати файл поза цією папкою (так, не використовуючи cdкоманди), не включаючи папку dir.

zip -r ./folder/artifact.zip ./folder/artifact1.app

Ця команда включає папку dir в остаточному ZIP. Якісь підказки?

Питання, пов’язані з цим: закопуйте вміст папки, не включаючи саму папку


1
Зі -jдовідкових сторінок здається, що застосовується лише те , що стискає всі папки в єдиний каталог кореневого рівня в ZIP. Це не те, що ви шукаєте, чи не так?
фірфокс

@phyrfox Можливо, так. Потрібно це перевірити. Дякую.
Лоренцо Б

Відповіді:


13

Якщо ви хочете зберегти всі файли folderпід їх іменем без зазначення каталогу, ви можете скористатися -jопцією.

zip -j folder/artifact.zip folder/artifact1.app folder/artifact2.ext2 folder/artifact3.ext3

або

zip -j folder/{artifact.zip,artifact1.app,artifact2.ext2,artifact3.ext3}

Якщо у вас є файли в підкаталогах, вони також не матимуть жодного компонента каталогу в архіві, наприклад, folder/subdir/fooвони будуть зберігатися в архіві як foo.

Але, мабуть, було б легше змінити каталог. Це майже така ж кількість набору, як і метод брекету абе. Якщо ви це зробите, якщо ви включаєте файли у підкаталоги, вони матимуть відносний шлях до каталогу, в який ви змінили, наприклад folder/subdir/foo, зберігатимуться як subdir/foo.

(cd folder && zip artifact.zip artifact1.app artifact2.ext2 artifact3.ext3)

Для інтерактивного використання ви втрачаєте завершення оболонки таким чином, оскільки оболонка не усвідомлює, що ви будете знаходитись в іншому каталозі при виконанні zipкоманди. Щоб виправити це, видайте cdкоманду окремо. Щоб легко повернутися до попереднього каталогу, ви можете використовувати pushdі popd.

pushd folder
zip artifact.zip artifact1.app artifact2.ext2 artifact3.ext3
popd

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


Вам не доведеться чітко перераховувати всі файли у підкаталозі ( folder), ви можете просто використовувати підстановку, тобтоzip -j folder/*
Jakub Kukul

Якщо покластися на розширення оболонки, це означає, що точкові файли (наприклад .profile) не будуть включені до архіву. Натомість змініть поточний робочий каталог та вкажіть .як файл, який потрібно архівувати:cd folder && zip -r ../folder.zip .
sheldonh
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.