Разве оба -
и -@
просто позволяют вам заменять аргументы в zip
материалом, переданным через стандартный ввод? Какая разница?
1 ответ
Разница в том, что -
сжимает stdin
как будто stdin
сам является файлом, который нужно сжать. -@
прочитает список имен файлов из stdin
и добавит каждый из этих файлов в архив. Примеры на странице руководства иллюстрируют разницу (хотя, пожалуйста, на самом деле не используйте пример -@
, он не работает и не будет работать с любыми именами, содержащими символы в IFS
например пробелы):
В Unix этот параметр может быть использован для эффективного эффекта в сочетании с командой find (1). Например, чтобы заархивировать все исходные файлы C в текущем каталоге и его подкаталогах:
find . -name "*.[ch]" -print | zip source -@
а также
zip также принимает одну черту ("-") в качестве имени файла, который будет сжат, и в этом случае он будет считывать файл из стандартного ввода, позволяя zip получать данные из другой программы. Например:
tar cf - . | zip backup -