Что делает параметр -f в команде tar

19

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

Я посмотрел на человека, и он сказал;

-f, --file [HOSTNAME:]F

use archive file or device F (default
"-", meaning stdin/stdout)

Но, честно говоря, я понятия не имею, что это значит. Кто-нибудь может пролить свет на это?

Тоби
источник

Ответы:

20

-fОпция указывает , tarчто следующий аргумент является именем файла архива, или стандартный вывод , если он -.

ddeimeke
источник
Ах, ура! Я предположил, что имя файла должно появиться в любом случае, так что этот -f делал что-то более особенное!
Тоби
6
@Toby: я подозреваю, что это по историческим причинам. «tar» означает сокращение от «архива на магнитной ленте», и, по-видимому, в первоначальных версиях не предполагалось, что люди часто используют дисковые файлы для архивов.
Дэвид Торнли
8

Довольно просто. Если вы пропустите -fпараметр, вывод передается в стандартный вывод:

gammy@denice:/tmp/demo$ tar -c a b c
a0000644000175000017500000000000011435437117010223 0ustar  gammygammyb0000644000175000017500000000000011435437117010224 0ustar  gammygammyc0000644000175000017500000000000011435437117010225 0ustar  gammygammygammy@denice:/tmp/demo$ ls
a  b  c
gammy@denice:/tmp/demo$ 

... какой беспорядок!

-fПараметрическое (как вы процитировали) ожидает , что имя файла (и , возможно , имя хоста), поэтому первый аргумент после того , как имя выходного файла:

gammy@denice:/tmp/demo$ tar -cf output.tar a b c
gammy@denice:/tmp/demo$ ls
a  b  c  output.tar
gammy@denice:/tmp/demo$ 
GAMEN
источник
5
> Если вы подавите параметр -f, вывод будет передан в стандартный вывод . Это верно для GNU tar, но я помню, что в Solaris по умолчанию использовалось ленточное устройство ( /dev/rmt0или что-то в этом роде).
Кристиан Чиупиту
* опустить (не «угнетать»)
Mr Ethernet
1
Даже GNU tarсоблюдает более не задокументированную TAPEпеременную. Например, попробуйте TAPE=/tmp/tape.tar tar cv /etc/h*и тогда ls -l /tmp/tape.tar.
Роайма
2

Это позволяет вам указать файл или устройство, с которым вы собираетесь работать. Либо создавать, обновлять или извлекать вещи из него в зависимости от других предоставленных флагов. Например:

# Create a tar file with the contents of somepath/
tar -cvf filename.tar somepath/

# Extract the tar file.
tar -xvf filename.tar
signine
источник