스크립트는 매일 같은 이름의 새 파일을 생성해야 하며, 생성하기 전에 날짜 타임스탬프가 포함된 전날 파일의 이름을 바꿔야 합니다.

스크립트는 매일 같은 이름의 새 파일을 생성해야 하며, 생성하기 전에 날짜 타임스탬프가 포함된 전날 파일의 이름을 바꿔야 합니다.

매일 매시간 실행되는 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

관련 정보