
Unixでファイルを書き込む際に問題があります
[ -s $PWD/MEN/*sub.wav ] && echo "File there" || echo "File Not there" > temp.csv
この unix コマンドを試していますが、temp.csv ファイルは記録されません。
答え1
temp.csv
コマンドに書き込まれる唯一の内容は最後のコマンドであり、echo
テストまたは最初のテストが失敗した場合にのみ実行されます。-s
echo
ファイルに正しく出力するには:
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