Espero que seja bom notar isso, agora que eu o encontrei:
Eu já sei que é possível testar a existência de arquivos usando o comando test
( [
):
$ touch exists.file
$ if [ -f exists.file ] ; then echo "yes" ; else echo "no" ; fi
yes
$ if [ -f noexists.file ] ; then echo "yes" ; else echo "no" ; fi
no
... mas isso é um pouco digitado lá :)
Então, eu estava vagando se houver um comando único "padrão", que retornará o resultado da existência de arquivo stdout
?
Também posso usar test
com o status de saída $?
:
$ test -f exists.file ; echo $?
0
$ test -f noexists.file ; echo $?
1
... mas ainda existem dois comandos - e a lógica também é "inversa" (0 para sucesso e diferente de zero para falha).
A razão pela qual estou perguntando é que preciso testar a existência do arquivo in gnuplot
, cujo " system("command")
retorna o fluxo de caracteres resultante de stdout como uma string. "; em gnuplot
eu posso fazer diretamente:
gnuplot> if (0) { print "yes" } else { print "no" }
no
gnuplot> if (1) { print "yes" } else { print "no" }
yes
então eu basicamente gostaria de escrever algo assim (pseudo):
gnuplot> file_exists = system("check_file --stdout exists.file")
gnuplot> if (file_exists) { print "yes" } else { print "no" }
yes
... infelizmente, não posso usá-lo diretamente via test
e $?
:
gnuplot> file_exists = system("test -f exists.file; echo $?")
gnuplot> if (file_exists) { print "yes" } else { print "no" }
no
... eu teria que inverter a lógica.
Então, eu basicamente teria que criar uma solução de script personalizada (ou escrever um script embutido como uma linha) ... e pensei: se já existe um comando padrão que pode imprimir 0 ou 1 (ou uma mensagem personalizada) para stdout para a existência do arquivo, então não preciso fazer isso :)
(observe que ls
pode ser um candidato, mas a saída stdout é muito detalhada; e se eu quiser evitar isso, teria que suprimir toda a saída e retornar novamente o status existente, como em
$ ls exists.file 1>/dev/null 2>/dev/null ; echo $?
0
$ ls noexists.file 1>/dev/null 2>/dev/null ; echo $?
2
... mas são novamente dois comandos (e mais digitação) e lógica "invertida" ...)
Então, existe um único comando padrão que pode fazer isso no Linux?
( [ -f py_concur.py ] && echo "file exists" ) || echo "file does not exist"
?Respostas:
Parece que você precisa do status de saída revertido, para que você possa:
ou:
(observe que
-f
é para se o arquivo existe e é um arquivo normal ).fonte
Use este comando bash único:
A
[]
realização do teste e retorna 0 em caso de sucessofonte
&&
e||
operadores:[ -f /home/user/file_name ] || echo "File not present"
e também[ -f /home/user/file_name ] && echo "File is present"
Que tal "inverter a lógica" por:
fonte
Isso funciona:
... se você possui o PowerShell instalado. Retorna a string "True", se o caminho existe, ou "False", se não existir. (Recebo pontos "sarcasticamente inúteis" para esta resposta?)
fonte