私は特定のフォルダ内のファイル(この場合はそのフォルダ内のすべての.csvファイル)を削除する非常に単純なシェルを作成しています。
コードは次のとおりです。
#!/bin/bash
# Used to clean folder
MinVal=0
Files=$(ls -1 *.csv | wc -l)
if [ $Files -gt $MinVal ];then
rm *.csv
echo -e "\e[31;43m***** DONE *****\e[0m"
else
echo -e "\e[31;43mThere is no valid file to delete, please check\e[0m"
fi
シェルスクリプトは期待どおりに機能しますが、シェルを実行してフォルダに.csvファイルがない場合、端末に次のように表示されます。
ls: cannot access *.csv: No such file or directory
もちろん、次のelse
メッセージも表示されます。
There is no valid file to delete, please check
これを回避し、エラー処理をls: cannot access *.csv: No such file or directory
直接実行する方法はありますか?else
挨拶。
ベストアンサー1
これは、シェルが*.csv
デフォルトのPOSIX動作のままに渡されるために発生します。ls
これを回避するには、nullglob
入力の軸文字列を返すのではなく、何も返さないglobを使用する必要があります。しかし、ここには問題があります。ls
ファイルが提供されない場合は動作が異なるためです。
ファイル名に改行文字が含まれている場合は、エラーを回避する利点がある次の方法を試してください。
shopt -s nullglob
filenames=( *.csv ) # put all files in an array
files="${#filenames[@]}" # get number of files