Почему конкретная последовательность вариантов имеет значение для команды tar?

Я пытался выполнить команду tar для создания архива с расширением .tar .

пожалуйста, ознакомьтесь со следующей командой, которую я пробовал:

 $ ls abc.jpg hello.jpg xjf.jpg $ tar -cfv test.tar *.jpg tar: test.tar: Cannot stat: No such file or directory tar: Exiting with failure status due to previous errors $ ls abc.jpg hello.jpg v xjf.jpg $ rm v $ ls abc.jpg hello.jpg xjf.jpg $ tar -cvf test.tar *.jpg abc.jpg hello.jpg xjf.jpg $ ls abc.jpg hello.jpg test.tar xjf.jpg 

почему он дает разные ответы с различными вариантами? т.е. -cfv vs cvf .
из того, что я узнал в сценариях bash, что последовательность параметров не имеет значения.

  • Сохранять метаданные или редактировать метаданные с помощью tar
  • Резервное копирование файлов определенного предела в unix
  • touch и tar из текстового файла
  • Как деформировать, расколоть, труба, распаковать по ssh
  • Является ли моя лента дефектной или есть еще одна проблема?
  • Вложенные папки Untar с содержимым начальной папки в linux
  • Как проверить, что «ls» выводит что-то ... с помощью одной команды?
  • Могу ли я взять вывод ldd и загрузить файлы .so?
  • 3 Solutions collect form web for “Почему конкретная последовательность вариантов имеет значение для команды tar?”

    Как сказал @jcbermu, для большинства программ и в большинстве случаев порядок флагов командной строки не важен. Однако некоторые флаги ожидают значения. В частности, флаг tar -f :

      -f, --file ARCHIVE use archive file or device ARCHIVE 

    Таким образом, tar ожидает, что -f будет иметь значение, и это значение будет именем создаваемого tarfile. Например, чтобы добавить все файлы .jpg в архив с именем foo.tar , вы могли бы запускать

     tar -f foo.tar *jpg 

    То, что вы использовали, было

     tar -cfv test.tar *.jpg 

    tar понимает, что «создайте ( -c ) архив с именем v ( -fv ), содержащий файлы test.tar и любое завершение на .jpg .

    Когда вы запускаете tar -cvf test.tar *.jpg с другой стороны, в качестве имени test.tar требуется test.tar как имя архива, а *jpg – список файлов.

    Заказ не имеет значения, если для параметра не требуется значение. В вашем случае – необходимо указать имя файла.

    В первом случае ( tar -cfv ) команда считает, что выходные имена файлов – v, потому что после -f .

    В то время как другие указали, что рассматривали его как -c -fv , я считаю, что это нужно сделать только потому, что тире было использовано, и это поведение не распространяется на все версии tar. В режиме устаревания (без тире) tar обрабатывает первый аргумент специально, а внутри него «f» или «b» будут потреблять следующие полные слова после опций (так что tar cfb file.tar 20 или tar cbf 20 file.tar ). Для GNU tar вы можете найти более подробную информацию в полной документации Texinfo, запустив info tar styles .

    В общем, вы не должны полагаться на поведение, и всегда указываете f как последний параметр и помещаете пробел между ним и именем файла. ( -b имеет значение только в некоторых ситуациях при записи на физические стримеры, поэтому его можно игнорировать для этого обсуждения.)

    Interesting Posts

    Как имитировать вывод веб-камеры путем обновления файла jpg?

    Почему я не могу загружать файлы в открытый Sftp?

    Почему мой диалог сохранения приложения X11 неожиданно по умолчанию совпадает с «Недавно сохраненным» в боковой панели «Места»?

    Выделите текущую дату в кадре

    Синхронизация Resilio не запускается при загрузке

    Как создать саморазрушающуюся веб-страницу?

    Bluez bluetoothd требует root для всех взаимодействующих с ним процессов

    Как я могу загрузить GRUB на другом диске?

    Проблема компиляции документации Binutils

    Можно ли показывать текущий номер строки истории при выполнении обратного поиска в bash?

    Описание значений kernel.printk

    Прокрутка отключена внезапно в терминале

    Как сохранить копию защищенной формы PDF в Evince?

    какие инструменты я могу использовать, чтобы быстро показать / скрыть некоторые напоминания о себе?

    Вставка избранных в консоль консоли

    Linux и Unix - лучшая ОС в мире.