Команда Unix zip обновляет существующий архив вместо создания нового [duplicate]

Как вы заметили в своем вопросе, эта подстановка:

`cat $CHECK/samplefile | grep "string"`

была выполнена на вашей локальной машине. Вы можете легко исправить это следующим образом:

ssh -n test@192.168.1.2 \
"until { cat ""$CHECK""/samplefile | grep ""string""; }; do \
touch  ""$CHECK""/success; \
done"

Как вы видите, вам не нужна никакая подстановка, кроме разрешения переменной $CHECK. Вы можете поместить условные инструкции в список {...}, и теперь код выхода списка будет решающим для инструкции until.

5
30.07.2016, 02:08
2 ответа

Во-первых, обратите внимание, что выполнение zip - $ (which zip) аналогично его выполнению как просто zip . Утилита и находит программный файл на пути пользователя.

При наличии Zip-архива zip добавит новых файлов, заменит существующих файлов, но не удалит файлов в архив, если эти файлы были удалены из файловой системы.

Чтобы удалить файл из Zip-архива:

$ zip -d archive.zip filename

Очевидно, вы также можете просто удалить архив с помощью rm перед его повторным созданием.

Для вашего сценария NodeJS вы можете использовать

rm -f ../data.zip && zip -r ../data.zip .

Флаг -f для rm заставляет rm не сбой, если архив не существует.

9
27.01.2020, 20:36

Как указано в записи справки команды zip :

Действие по умолчанию - добавить или заменить записи zip-файла из списка

Это объясняет, почему поведение по умолчанию не работает вовлекает удаление файлов в zip-файле, и причина, по которой huge.pdf остается в нем.

Если вы хотите полностью переопределить существующий архив, вы можете создать новый временный zip-файл, а затем заменить предыдущий. Кроме того, вызов команды which не является необходимым, поэтому команда должна быть следующей:

zip -r temp.zip . ; mv temp.zip ../data.zip
1
27.01.2020, 20:36

Теги

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