同じ名前のファイルと競合するファイルがあるかどうかを確認しています。bashスクリプトは、ファイル名と文字列を比較すると "No such file or directory"と表示します
FILEPATH=/root/logs/pData*.csv
COMPPATH=/root/logs/pData*.csv.gz
shopt -s nullglob
thisYear="$(date +"%Y")"
thisMonth="$(date +"%m")"
thisDay="$(date +"%d")"
thisTime="$(date | cut -d ' ' -f 4 | tr : _)"
for file in $FILEPATH
do
fileYear="$(stat -c %y $file | cut -d'-' -f 1)"
fileMonth="$(stat -c %y $file | cut -d'-' -f 2)"
fileDay="$(stat -c %y $file | cut -d'-' -f 3 | cut -d' ' -f 1)"
fileTime="$(stat -c %y $file | cut -d ' ' -f 2 | cut -d '.' -f 1 | tr : _)"
if (("$fileYear" < '1990'))
then
fName="pData_"$thisYear"_"$thisMonth"_"$thisDay"_"$thisTime".csv.gz"
else
fName="pData_"$fileYear"_"$fileMonth"_"$fileDay"_"$fileTime".csv.gz"
fi
echo $fName
for file in $COMPPATH
do
if ('/root/logs/'$fName == $file)
then
echo "OOPS"
fi
done
done
大部分が意図したとおりのスクリプトは、私は同じ名前のファイルに実行したときOOPSを印刷し、動作しますが、これはなぜ存在しないファイルのために、それは
./compress.sh: line 31: /root/logs/pData_2015_09_18_22_25_44.csv.gz: No such file or directory
を印刷します印刷された?
これを防ぐにはどうすればよいですか?
ほかJamie Wが与えた(正しい)答えに、あなたのコードをhttp://shellcheck.net/で実行し、見つかったものをすべて修正することを検討してください。 –