quando usar -f ou -uma tag em loop

0

Estou confuso entre duas opções que podem ser usadas na instrução if no bash scripting.

Um é -f e o outro é -a .

A descrição deles diz o seguinte:

[ -f FILE ] True if FILE exists and is a regular file.
[ -a FILE ] True if FILE exists.

Agora, ao usar a condição if no meu script de shell, como posso saber qual tag devo usar. Como eu tenho um script que leva backups regulares usando tar e cria um arquivo file-name.tar.gz assim como posso saber qual é um arquivo regular. Obrigado.

    
por Tarun 09.12.2013 / 09:22

2 respostas

2

Arquivos regulares são todo o texto ou arquivo de dados, também pode ser um arquivo binário. Para arquivos regulares, a saída de ls -l seria como,

-rw-rw-r-- 1 username group 74 Nov 27 16:03 mytext.txt

Em geral, o primeiro lugar para um arquivo regular a - deve aparecer. Nesses casos, if [ -f FILE ] seria apropriado.

Arquivos não-regulares são dispositivos, pipes, sockets, tty etc. todos os outros que se enquadram na filosofia "Tudo é um arquivo", como apontado pela drc. Você pode acessar Unix_file_types para obter mais informações.

Você pode verificar a saída ls -l de alguns,

crw-rw---- 1 root tty 4, 1 Dec  9 13:41 /dev/tty1
brw-rw---- 1 root disk 1, 11 Dec  9 13:41 /dev/ram11

Para todos os arquivos não regulares, você deve usar if [ -a FILE ]

    
por souravc 09.12.2013 / 09:53
1

Para arquivos tar - e basicamente qualquer outro arquivo que você criar - -f é a escolha correta.

-a é para arquivos especiais como nós de dispositivos, fifos e outros, que, de acordo com a filosofia Unix do Tudo é um arquivo são apresentados como arquivos em seu sistema de arquivos.

    
por drc 09.12.2013 / 09:32