ファイルが存在するかどうかを確認し、(カスタム)メッセージを標準出力に出力する単一のコマンド?


18

これに気づいたので、私がそれに遭遇したので、それがOKであることを願っています:

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

...しかし:)、それはそこに少し入力するので、ファイルの存在結果を返す「デフォルト」の単一のコマンドがある場合、私はさまよっていましたstdoutか?

test終了ステータスで使用することもできます$?

$ test -f exists.file ; echo $?
0
$ test -f noexists.file ; echo $?
1

...しかし、これはまだ2つのコマンドです-また、ロジックは「逆」です(成功の場合は0、失敗の場合は非ゼロ)。

私が求めている理由は、のファイルの存在をテストする必要があるからですgnuplot。そのファイルの「system("command")結果の文字ストリームを文字列としてstdoutから返します。」; でgnuplot、私が直接行うことができます。

gnuplot> if (0) { print "yes" } else { print "no" }
no
gnuplot> if (1) { print "yes" } else { print "no" }
yes

だから私は基本的にこのようなもの(擬似)を書くことができるようにしたい:

gnuplot> file_exists = system("check_file --stdout exists.file")
gnuplot> if (file_exists)  { print "yes" } else { print "no" }
yes

...残念ながら、testand を介して直接使用することはできません$?

gnuplot> file_exists = system("test -f exists.file; echo $?")
gnuplot> if (file_exists)  { print "yes" } else { print "no" }
no

...ロジックを逆にする必要があります。

だから、基本的にカスタムスクリプトソリューションのようなものを考え出す必要があります(または1つのライナーとしてスクリプトをインラインで記述する)...そして、0または1を印刷できるデフォルトコマンドがすでにある場合(またはカスタムメッセージ)ファイルの存在を標準出力するには、そうする必要はありません :)

lsこれは候補かもしれませんが、stdoutの出力は非常に冗長です。それを避けたい場合は、すべての出力を抑制して、存在ステータスを再度返さなければなりません。

$ ls exists.file 1>/dev/null 2>/dev/null ; echo $? 
0
$ ls noexists.file 1>/dev/null 2>/dev/null ; echo $? 
2

...しかし、これもまた2つのコマンド(およびより多くの入力)と「反転」ロジックです...)

だから、Linuxでこれを行うことができる単一のデフォルトコマンドがありますか?


2
どう( [ -f py_concur.py ] && echo "file exists" ) || echo "file does not exist"
-iruvar

回答:


9

終了ステータスを逆にする必要があるように聞こえるので、次のことができます。

system("[ ! -e file ]; echo $?")

または:

system("[ -e file ]; echo $((!$?))")

ファイルが存在し、通常のファイル-fである場合のためです)。


5

次の単一のbashコマンドを使用します。

 [ -f /home/user/file_name ]

[]成功したテストとリターン0を実行します


3
どちらの場合も返されません
-CentOS

1
macOSで最適に動作します。
ジョシュアピンター

1
あなたはとの条件付きでコマンドを実行するためにこれを使用することができます&&し、||:演算子[ -f /home/user/file_name ] || echo "File not present"とも[ -f /home/user/file_name ] && echo "File is present"
charlesreid1

1
@ charlesreid1が仕事をします、ありがとう!
マルタカラス

1

「ロジックの反転」はどうですか:

file_exists = 1-system("test -f exists.file; echo $?")

-1

これは動作します:

pwsh -c Test-Path /etc/passwd

... PowerShellがインストールされている場合。パスが存在する場合は文字列「True」を返し、存在しない場合は「False」を返します。(この回答に対して「皮肉にも役に立たない」ポイントを獲得できますか?)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.