Добавить файлы в ZIP Archive Пропуск существующих файлов с zip-командой

SLES 10 SP4:

$ mount | grep tmpfs
udev on /dev type tmpfs (rw)

Не уверен насчет SP3, но я ожидаю, что он будет похож. С какими другими системами вы сравниваете SLES 10 SP3? Он довольно старый, и с годами все изменилось ...

1
28.09.2018, 12:29
1 ответ

Извлечение имен файлов из zip-архива — сложная задача, поэтому используйте следующие действия с осторожностью; он будет обрабатывать только имена файлов, которые не содержат пробелов или табуляции (и символов из$IFS).

Первый метод использует цикл с командой grep, чтобы выяснить для каждого запрошенного файла, существует ли он уже в архиве; если нет, цикл добавляет этот файл в архив.

Второй метод запускает одну команду zip, но указывает zip исключить файлы, которые уже находятся в архиве, используя параметр -x.

zipaddgrep() {
  ziparchive=$1
  shift
  for arg
  do
    if ! zipinfo -1 "$ziparchive" | grep -Fqx "$arg"
    then
        zip "$ziparchive" "$arg"
    fi
  done
}

zipaddexclude() {
  ziparchive=$1
  shift
  zip -u "$ziparchive" "$@" -x $(zipinfo -1 "$ziparchive")
}

В качестве демонстрации:

# setup
mkdir ~/tmp/472017
cd ~/tmp/472017
mkdir thefiles
date > thefiles/file1
date > thefiles/file2
date > thefiles/file3
zip zipfile thefiles/file{1,2}

# method 1
$ set -x
$ zipaddgrep zipfile.zip thefiles/*
+ zipaddgrep zipfile.zip thefiles/file1 thefiles/file2 thefiles/file3
+ ziparchive=zipfile.zip
+ shift
+ for arg in '"$@"'
+ grep --color=auto -Fqx thefiles/file1
+ zipinfo -1 zipfile.zip
+ for arg in '"$@"'
+ grep --color=auto -Fqx thefiles/file2
+ zipinfo -1 zipfile.zip
+ for arg in '"$@"'
+ grep --color=auto -Fqx thefiles/file3
+ zipinfo -1 zipfile.zip
+ zip zipfile.zip thefiles/file3
  adding: thefiles/file3 (stored 0%)

# cleanup
rm zipfile.zip
zip zipfile thefiles/file{1,2}

# method 2
$ zipaddexclude zipfile.zip thefiles/*
+ zipaddexclude zipfile.zip thefiles/file1 thefiles/file2 thefiles/file3
+ ziparchive=zipfile.zip
+ shift
++ zipinfo -1 zipfile.zip
+ zip -u zipfile.zip thefiles/file1 thefiles/file2 thefiles/file3 -x thefiles/file1 thefiles/file2
  adding: thefiles/file3 (stored 0%)
1
27.01.2020, 23:42

Теги

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