bash: arquivo existente não existente - ou existente? ou não?

1

Eu tenho um problema que não posso consertar e, espero, recebo ajuda aqui.

Em um diretório chamado qemu-servers deve ser um arquivo chamado 100.conf . Mas o bash não mostra, mas se eu testá-lo, está aí ...

root@proxmox:/etc/pve/nodes/proxmox/qemu-server# test 100.conf && echo "Found" || echo "Not found"
Found

Se eu fizer ls -a , não será mostrado:

root@proxmox:/etc/pve/nodes/proxmox/qemu-server# ls -a
.  ..  101.conf

existe um arquivo chamado 101.conf , mas não 100.conf

Se eu tentar rm o 100.conf , touch it ou qualquer outra coisa, o bash retorna um erro:

root@proxmox:/etc/pve/nodes/proxmox/qemu-server# rm 100.conf
rm: cannot remove ‘100.conf’: No such file or directory
root@proxmox:/etc/pve/nodes/proxmox/qemu-server# touch 100.conf
touch: cannot touch ‘100.conf’: File exists

Como posso me livrar desse problema?

    
por Thomas_H 26.10.2016 / 15:51

1 resposta

4

O problema está aqui:

test 100.conf

está fazendo um teste de string, ou seja, se a string 100.conf não estiver vazia. Como não está vazio, você sempre obterá Found .

Isso é análogo a:

test -n 100.conf
[ 100.conf ]
[ -n 100.conf ]

Você precisa da verificação de existência de arquivo, ou seja, test -f :

test -f 100.conf && echo "Found" || echo "Not found"
    
por heemayl 26.10.2016 / 15:54