나는 PHP에서 이것을하지 않기를 원하므로 쉘 스크립팅에 능숙한 사람이 도울 수 있기를 바랍니다.
디렉토리를 재귀 적으로 실행하고 마지막으로 수정 한 날짜가있는 모든 파일이 어떤 날짜보다 큰 것을 찾는 스크립트가 필요합니다. 그런 다음 경로 정보를 유지하면서 파일을 tar로 압축합니다.
나는 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
-newermt
하면 훨씬 좋습니다.
-type f
선택한 파일에만 추가 하십시오. 이렇게하면 폴더 구조가 유지되지만 변경 사항이있는 파일 만 백업됩니다.
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
이 경우에도 사용자 인터럽트 경우, 등등 등등 제거됩니다 보장 할 수 있습니다.
-newermt '2009-01-03T12:31:43'
참조 용으로 파일을 작성하지 않아도됩니다.
-newermt
( -newerXY
여러 옵션이 있으므로 아래에 설명되어 있습니다;이 경우 X = m, Y = t). 내가 사용하는 (거의 고풍스러운) Linux 시스템에서 GNU find는 옵션을 지원하지 않으므로 비교적 최근에 도착했습니다. 고마워요
-newermt '-2 weeks'
.
-newermt '2009-01-03T12:31:43'
멋져 보이지만 슬프게도 잘못된 시간대의 모든 것을 해석하는 것 같습니다 : lists.gnu.org/archive/html/bug-findutils/2012-12/msg00009.html
tar로 직접 수행 할 수 있으며 더 좋습니다.
tar -N '2014-02-01 18:00:00' -jcvf archive.tar.bz2 files
이것은 tar에게 2014 년 1 월 1 일 18:00:00보다 새로운 파일을 압축하도록 지시합니다.
tar
OS X와 FreeBSD 만 지원 하며 GNU에서 --newer
긴 옵션입니다 . -N
tar
이것은 몇 개의 파일에서 작동합니다. 경로에 공백이있는 경우 "-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으로 압축해야합니다.
-type f
선택한 파일에만 추가 하십시오. 이것은 폴더 구조를 유지하지만 최근에 변경 / 추가 된 파일 만 백업합니다.
이 스크립트는 지정된 날짜 전후에 수정 날짜가 2 분인 파일을 찾습니다 (필요에 따라 조건의 값을 변경할 수 있음)
PATH_SRC="/home/celvas/Documents/Imp_Task/"
PATH_DST="/home/celvas/Downloads/zeeshan/"
cd $PATH_SRC
TODAY=$(date -d "$(date +%F)" +%s)
TODAY_TIME=$(date -d "$(date +%T)" +%s)
for f in `ls`;
do
# echo "File -> $f"
MOD_DATE=$(stat -c %y "$f")
MOD_DATE=${MOD_DATE% *}
# echo MOD_DATE: $MOD_DATE
MOD_DATE1=$(date -d "$MOD_DATE" +%s)
# echo MOD_DATE: $MOD_DATE
DIFF_IN_DATE=$[ $MOD_DATE1 - $TODAY ]
DIFF_IN_DATE1=$[ $MOD_DATE1 - $TODAY_TIME ]
#echo DIFF: $DIFF_IN_DATE
#echo DIFF1: $DIFF_IN_DATE1
if [[ ($DIFF_IN_DATE -ge -120) && ($DIFF_IN_DATE1 -le 120) && (DIFF_IN_DATE1 -ge -120) ]]
then
echo File lies in Next Hour = $f
echo MOD_DATE: $MOD_DATE
#mv $PATH_SRC/$f $PATH_DST/$f
fi
done
예를 들어, 당신은 주어진 날짜 만 변경할 수 있습니다 전에 파일이 수정 날짜를 가지고 원하는 120
에 0
에 $DIFF_IN_DATE
의 조건 폐기 매개 변수 $DIFF_IN_DATE1
매개 변수를.
마찬가지로 당신은 파일을 그냥 교체 1 시간 전에 주어진 일 이후 수정 날짜를 가지고 싶다면 120
의해 3600
에서 if CONDITION
.