매일 매시간 실행되는 Unix 작업이 있습니다.
매일 같은 이름의 새 파일(예: abc.xyz)을 생성하도록 스크립트를 업데이트하려고 합니다. 생성하기 전에 전날의 파일(abc.xyz.12102014)의 이름을 날짜 타임스탬프로 바꿔야 합니다.
첫 번째 시간에는 파일을 생성하면 두 번째 시간 등에는 동일한 파일(abc.xyz)을 사용해야 합니다.
다음 날(13102014)에는 이 파일(abc.xyz)을 abc.xyz.12102014로 이름을 바꿔야 하고, 새로운 abc.xyz가 생성되어야 하고, 14102014에는 abc.xyz.13102014로 이름이 바뀌었습니다.
아래에서 시도했지만 오류가 발생했습니다.
if [ $filedate -lt $currdate ]
위 예에서 날짜 는 어디에 12 Command Not found
있습니까 ?12
아래 스크립트에 어떤 문제가 있는지 도와주세요.
저는 Unix를 처음 접했기 때문에 사용된 논리는 C#에서 사용하는 것과 유사합니다.
다른 방법이 있으면 알려주세요.
sdate=`date +%Y-%m-%d -d "yesterday"`
file=myfile
currdate=`date +%d`
currmon=`date +%m`
if [ -f $file ]
then
echo "File exists."
filedate=$(ls -l $file| awk '{ print $7}')
if [ $filedate -lt $currdate ]
then
echo "Old File"
cp $file $file.$sdate
rm $file
else
##something to do
fi
else
##something to do
fi
다음 달 1일과 이번 달 30/31인 날짜에 대해 비슷한 논리를 수행할 수 있지만 다시 실패합니다.
if [$filemonth -lt $currmonth]
답변1
파일을 생성하는 대신 abc.xyz
(실제) 파일에 대한 심볼릭 링크를 생성하십시오 abc.xyz.YYYYMMDD
.
linkname="abc.xyz"
today="$( date +"%Y%m%d" )"
filename="$linkname-$today"
if [[ ! -e "$filename" ]] || [[ ! -e "$linkname" ]]; then
touch "$filename"
ln -s -f "$filename" "$linkname"
fi
이것은 생성됩니다
lrwxr-xr-x 1 kk kk 16 Feb 2 11:16 abc.xyz -> abc.xyz-20170202
-rw-r--r-- 1 kk kk 0 Feb 2 11:16 abc.xyz-20170202
그리고 귀하의 프로그램 쓰기는 abc.xyz
실제로 abc.xyz-20170202
.
다음날 이것을 실행하면 얻을 수 있습니다.
lrwxr-xr-x 1 kk kk 16 Feb 2 11:31 abc.xyz -> abc.xyz-20170203
-rw-r--r-- 1 kk kk 0 Feb 2 11:16 abc.xyz-20170202
-rw-r--r-- 1 kk kk 0 Feb 2 11:31 abc.xyz-20170203