파일 이름의 날짜 및 시간을 기준으로 파일 나열

파일 이름의 날짜 및 시간을 기준으로 파일 나열

UNIX에서 작업을 자동화하고 스크립트를 만들고 싶습니다.

매일 2개의 파일이 나타나는 디렉터리가 있으며, 이 파일들은 오후 10시에서 오전 1시 사이에 언제든지 나타납니다.

파일명은 batm53_20131025_BARC5300001201310240000000200004233.221341696408.

파일 이름이 세 부분으로 구성되어 있는 경우:

  1. batm53은 상수입니다
  2. 파일이 디렉토리에 도착한 날짜
  3. 이 부분은 BARC5300001201310170000000200004233.221341696408입니다. 여기서 BAR5300001은 상수이고 파일 날짜 이후입니다.

오늘이 10월 24일이고 오전 1시 이후에 파일이 나타난다고 가정하면, 파일 이름의 두 번째 부분은 10월 25일을 표시하지만 BAR5300001 다음 세 번째 부분은 10월 24일 날짜(20131024)를 표시합니다.

이 상황에서 문제가 발생했습니다. 파일이 오후 10시에서 오전 12시 사이에 나타나는 경우 find 명령을 사용하여 스크립트를 간단하게 만들 수 있지만 해당 부분을 만드는 데 문제가 있습니다. 파일은 이전 날짜여야 하고 오전 12시 이후에는 날짜가 변경되어야 하기 때문에 오전 12시 이후에 파일이 도착했는지 어떻게 확인할 수 있나요?

답변1

오전 12시에 "temp" 파일을 만든 다음 최신 파일을 찾아 해당 날짜로 해당 파일의 이름을 바꿀 수 있습니다.

예를 들어:

1 단계

오전 12시 이후에 파일을 생성하려면 다음 명령을 사용하십시오.

$ touch -d "$(date +%F)" temp.file

touch2013년 10월 26일에 실행한 경우 파일 날짜는 "Oct 26 00:00"이 됩니다.

2 단계

원하는 대로 이전 날짜를 파일에 설정한 다음 이전 날짜를 가져오는 변수를 만듭니다.

$ Yesterday=$(date +%Y%m%d -d '1 day ago')

노트:(이렇게 하면 변수에 "20131025" 값이 저장됩니다.)

3단계

temp.file이제 우리가 만든 파일보다 최신 파일을 찾을 수 있습니다 .

$ find . -type f -newer temp.file

알겠습니다. 낮 12시 이후에 생성된 파일을 마음껏 시청해 보세요. 이제 이름을 이전 날짜로 바꾸시겠습니까?

$ find . -type f -newer temp.file | \
    awk -v y=$Yesterday '{split($0,arr,"_"); \
    print "mv -v --",$0, arr[1]"_"y"_"arr[3]}'

위 명령은 첫 번째 파일이 원래 파일 이름이고 두 번째 파일이 원하는 파일인 출력을 인쇄합니다.

출력이 좋아 보인다고 생각되면 | sh동일한 명령에 추가하십시오.

$ find . -type f -newer temp.file | \
    awk -v y=$Yesterday '{split($0,arr,"_"); \
    print "mv -v --",$0, arr[1]"_"y"_"arr[3]}' | sh

그러면 두 번째 부분의 이전 날짜를 사용하여 파일 이름이 변경됩니다. 따라서 위 명령의 도움으로 스크립트를 생성한 다음 cron을 사용하여 12시 이후에 실행할 수 있습니다.

관련 정보