[unix] 쉘 스크립트 — <date> 이후에 수정 된 모든 파일 가져 오기

나는 PHP에서 이것을하지 않기를 원하므로 쉘 스크립팅에 능숙한 사람이 도울 수 있기를 바랍니다.

디렉토리를 재귀 적으로 실행하고 마지막으로 수정 한 날짜가있는 모든 파일이 어떤 날짜보다 큰 것을 찾는 스크립트가 필요합니다. 그런 다음 경로 정보를 유지하면서 파일을 tar로 압축합니다.



답변

다음과 같이 간단합니다.

find . -mtime -1 | xargs tar --no-recursion -czf myfile.tgz

여기서 find . -mtime -1전날 수정 된 (재귀 적으로) 현재 디렉토리의 모든 파일을 선택합니다. 예를 들어 분수를 사용할 수 있습니다.

find . -mtime -1.5 | xargs tar --no-recursion -czf myfile.tgz


답변

GNU가 있다면 find관련 옵션이 있습니다. 유일한 걸림돌은 인터페이스가 별보다 적다는 것입니다.

  • -mmin n (수정 시간 (분))
  • -mtime n (수정 시간 (일))
  • -newer file (파일의 수정 시간보다 새로운 수정 시간)
  • -daystart (현재 시간에서 시작 시간으로 시작 시간 조정)
  • 액세스 시간 및 ‘변경’또는 ‘생성’시간에 대한 대안.

어려운 부분은 시간 이후의 시간을 결정하는 것입니다.

고려해야 할 한 가지 옵션 : touch필요한 수정 시간 소인이있는 파일을 작성하는 데 사용하십시오. 그런 다음와 find함께 사용하십시오 -newer.

touch -t 200901031231.43 /tmp/wotsit
find . -newer /tmp/wotsit -print
rm -f /tmp/wotsit

2009-01-03T12 : 31 : 43보다 새로운 파일을 찾습니다. 분명히 스크립트 /tmp/wotsit에서 PID 또는 다른 값을 갖는 고유 한 이름이 될 것입니다. 그리고이 것 trap이 경우에도 사용자 인터럽트 경우, 등등 등등 제거됩니다 보장 할 수 있습니다.


답변

tar로 직접 수행 할 수 있으며 더 좋습니다.

tar -N '2014-02-01 18:00:00' -jcvf archive.tar.bz2 files

이것은 tar에게 2014 년 1 월 1 일 18:00:00보다 새로운 파일을 압축하도록 지시합니다.


답변

이것은 몇 개의 파일에서 작동합니다. 경로에 공백이있는 경우 “-print0″및 “xargs -0″을 포함하려고합니다. 이 예에서는 지난 7 일 동안 수정 된 파일을 찾습니다. 지난 7 일 전에 수정 된 항목을 찾으려면 “+7″을 사용하십시오.

find . -mtime -7 -print0 | xargs -0 tar -cjf /foo/archive.tar.bz2

이 페이지에서 경고하는 것처럼 인수가 많으면 xargs로 tar 명령이 여러 번 실행될 수 있으며 “-c”플래그는 문제를 일으킬 수 있습니다. 이 경우 다음을 원할 것입니다.

find . -mtime -7 -print0 | xargs -0 tar -rf /foo/archive.tar

tar로 압축 된 tar 아카이브를 업데이트 할 수 없으므로 두 번째 단계에서 bzip2 또는 gzip으로 압축해야합니다.


답변

지난 7 일 이내에 수정 된 모든 파일이 표시됩니다.

find . -type f -mtime -7 -print

그것을 tar / zip으로 파이프하면 좋을 것입니다.


답변

리눅스에서 find 명령의 맨 페이지를 읽으십시오.

man find

이와 같은 것

 find . -type f -mtime -7 -print -exec cat {} \; | tar cf - | gzip -9

그리고 당신은 그것을 가지고


답변

다음을 사용하여 x 일 전에 늦게 수정 한 파일 목록을 얻을 수 있습니다.

find . -mtime -x

그런 다음 결과 목록에서 파일을 tar 및 zip으로 압축하면됩니다. 예 :

tar czvf mytarfile.tgz `find . -mtime -30`

지난 달에 수정 된 모든 파일에 대해