수정 날짜를 기준으로 파일을 압축하고 싶습니다.

수정 날짜를 기준으로 파일을 압축하고 싶습니다.

하나의 문서(경로.dat)에는 15일이 지난 파일을 찾아 수정된 날짜와 함께 동일한 폴더에 압축해야 하는 여러 경로가 포함되어 있습니다.

경로.dat:- 파일 시스템에 여러 경로가 포함되어 있습니다(구분 기호 ' | ' 사용).

/docusr1/user01 | /docusr2/user02 | /home/user01

전임자:-/docusr1/user01

-rwxrwxrwx. 1 docusr2 docusr2     0 Mar 30 10:52 vinay.txt
-rw-rw-r--. 1 docusr2 docusr2     0 Mar 30 10:52 sathish.txt
-rw-rw-r--. 1 docusr2 docusr2   625 Apr  2 10:57 demo1.xml
-rw-rw-r--. 1 docusr2 docusr2  4430 Apr  2 11:09 sample.xml
-rw-rw-r--. 1 docusr2 docusr2    48 Apr  2 14:04 20180402140454.log
-rw-rw-r--. 1 docusr2 docusr2    48 Apr  2 14:39 20180402143917.log
-rw-rw-r--. 1 docusr2 docusr2    39 Apr  2 14:41 20180402144159.log
-rw-rw-r--. 1 docusr2 docusr2    84 Apr  2 14:46 20180402144651.log
-rw-rw-r--. 1 docusr2 docusr2   279 Apr  2 14:48 archive.sh
-rw-rw-r--. 1 docusr2 docusr2    84 Apr  2 14:48 20180402144814.log
-rw-rw-r--. 1 docusr2 docusr2  1228 Apr  5 10:10 real.xml

15일 전 파일을 검색하려면 수정일을 압축용 zip 파일명(보관파일)으로 사용해야 합니다.

예상 출력:-

20170330.zip  -> it should contain all file which are modified on 2017-03-30
20170402.zip
20170405.zip

답변1

find . -maxdepth 1 -mtime +15 -type f -printf "%TY%Tm%Td %p\n" | while read date name ; do zip $date $name; done

Ymd 형식의 파일이 마지막으로 수정된 시간

아래의 모든 디렉터리에 대해 이 작업을 수행하려면 여러 가지 방법이 있습니다. 일부는 아래에 나와 있습니다. 조회 시 절대 경로를 사용해야 합니다. 예를 들어 저는 다음과 같이 사용합니다."/home/user"

find /home/user -type d -print0 | while read -d '' -r dir; do cd "$dir" && pwd && find . -maxdepth 1 -mtime +15 -type f -printf "%TY%Tm%Td %p\n" | while read date name ; do zip $date $name; done; done

또는

find /home/user -type d -print0 | xargs -0 -I {} sh -c 'cd '\"{}\"' && pwd && find . -maxdepth 1 -mtime +15 -type f -printf "%TY%Tm%Td %p\n" | while read date name ; do zip $date $name; done'

답변2

다음을 시도해 볼 수 있습니다.

while read zipfile files; do 
    zip ${zipfile}.zip $files
done <<< $(find -maxdepth 1 -type f | xargs stat -c "%y,%n" | awk -F, '{a[substr($1,1,10)]=a[substr($1,1,10)] " " $2} END{for(i in a){print i a[i]}}')

루프 while에는 다음 형식의 문자열이 필요합니다.

zipfilename file1 file2 file3 ...

이는 다음에 의해 달성됩니다.

  • 현재 디렉터리의 모든 일반 파일을 가져옵니다.find -maxdepth 1 -type f
  • 수정 시간을 보는 데 사용합니다.stat
  • awk그날 수정된 모든 파일이 한 줄에 나열되도록 서식 결과를 사용합니다.

관련 정보