Unixでファイルに書き込む

Unixでファイルに書き込む

Unixでファイルを書き込む際に問題があります

[ -s $PWD/MEN/*sub.wav ] && echo "File there" || echo "File Not there" > temp.csv

この unix コマンドを試していますが、temp.csv ファイルは記録されません。

答え1

temp.csvコマンドに書き込まれる唯一の内容は最後のコマンドであり、echoテストまたは最初のテストが失敗した場合にのみ実行されます。-secho

ファイルに正しく出力するには:

if [ -s MEN/*sub.wav ]; then echo "File there"; else echo "File not there"; fi >temp.csv

または(まったく同じではありません)、

[ -s MEN/*sub.wav ] && echo "File there" >temp.csv || echo "File not there" >temp.csv

また、パターンがMEN/*sub.wav複数のファイル名と一致する場合、プログラムは構文エラーを生成します。

かどうかをテストしますか?最後のもの名前がパターンと一致し、空でない場合(-sテスト)次を使用します。

set -- MEN/*sub.wav

# Loop over the matching names (if any).
# Stop when we find a non-empty file.
while [ "$#" -gt 0 ] && [ ! -s "$1" ]; do
     shift
done
if [ -s "$1" ]; then
    echo File exists
else
    echo File not there
fi >temp.csv

かどうかをテストしますか?みんなパターンに一致する名前が空ではありません。

set -- MEN/*sub.wav

# Loop over the matching names (if any).
# Stop when we find an empty file.
while [ "$#" -gt 0 ] && [ -s "$1" ]; do
     shift
done
if [ "$#" -eq 0 ]; then
    echo File(s) exists
else
    echo File(s) not there
fi >temp.csv

コードの最後の部分は、場合によっては拡張されていないパターンを維持するためにシェルを使用します。いいえ名前が一致します。

答え2

コマンドを破ると同じです。

[ -s $PWD/MEN/*sub.wav ]

"$PWD"/MEN/*sub.wav パターンが複数のファイル名と一致しない場合は、とにかく実行されます。それから来ました。

echo "File There"

シェルはこのコマンドを実行しようとします。あなたの場合は正常に実行され、表示されます。||つまり、左側の部分が失敗した場合、右側の部分が実行されます。左部分の実行中は、右部分は実行されません。書きたい場合ファイルがあります。temp.csvに追加すると、コマンドは次のようになります。

[ -s $PWD/MEN/*sub.wav ] && echo "File there" > temp.csv || echo "File Not there" > temp.csv

または、この2つの部分を書きたい場合

[ -s $PWD/MEN/*sub.wav ] && echo "File there" > temp.csv && echo "File Not there" > temp.csv

関連情報