1

Я пытаюсь перечислить содержимое архива tar с помощью следующей команды

tar -t "filename".tar

Но оболочка работает над этим без каких-либо выходных сообщений.

Я провел исследование по этому вопросу и обнаружил, что для вывода содержимого архива следует использовать опцию -f и опцию -t.

tar -tf "filename".tar

Может кто-нибудь здесь, пожалуйста, ответьте мне, почему я должен использовать опцию -f с опцией -t для просмотра содержимого архива?

2 ответа2

1

Может кто-нибудь здесь, пожалуйста, ответьте мне, почему я должен использовать опцию -f с опцией -t для просмотра содержимого архива?

Tar начал как инструмент для записи несжатых данных на ленточный накопитель. (Отсюда и название, TApe ARchive). Вот почему по умолчанию используется стример.

В unix-подобных операционных системах устройства обрабатываются так же, как и файлы. Ленточный накопитель может быть /dev /st0 (устройство, лента SCSI 0). Это был ввод / вывод по умолчанию для tar.

Если вы хотите, чтобы tar обращался к другому файлу, например, /dev /st1 (второй стример) или /home/my_backup.tar (реальный файл), вам нужно указать это с опцией -f.


Тестирование этого на современной установке подтверждает, что оно все еще пытается открыть устройство SCSI по умолчанию:

toad:/home/hennes/demo>tar t demo.tar
tar: Error opening archive: Failed to open '/dev/sa0': No such file or directory

Указание файла для открытия вручную с -f работает как положено

toad:/home/hennes/demo>tar tf demo.tar
testfile1
testfile2
testfile3

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

0

По умолчанию tar берет свой ввод из stdin - например, из вывода другой команды.

Переключатель f говорит ему взять взамен ввод из файла.

Правильный синтаксис для использования без f будет

cat filename.tar | tar t

(обратите внимание, что в дефисе с tar нет необходимости). cat выводит содержимое файла с параметрами на стандартный вывод. Труба | Символ принимает стандартный вывод и передает его следующим командам стандартного ввода.

Причина, по которой tar находился там вечно, заключалась в том, что он ожидал поступления данных на стандартный ввод.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .