하루 안에 새 파일을 찾아 복사하세요.

하루 안에 새 파일을 찾아 복사하세요.

마지막 날 생성된 파일만 다른 폴더에 복사하는 스크립트를 작성 중입니다. 내가 겪고 있는 문제는 내 스크립트가 하루가 지나지 않은 파일뿐만 아니라 소스 디렉터리의 모든 파일을 복사한다는 것입니다.

이것이 내가 가진 것입니다:

find . -mtime -1 -exec cp --preserve --parents -a "{}" /somefolder \;

위 코드는 소스 디렉터리의 모든 파일을 복사합니다. "cp"의 모든 매개변수를 제거하면 작동합니다.

find . -mtime -1 -exec cp "{}" /somefolder \;

위 코드는 필요한 경우에만 최신 파일을 복사하지만 cp 매개변수를 사용하여 속성을 유지해야 합니다.

또한 -exec 옵션이 문제일 수 있다고 생각하여 변수와 for 루프를 시도해 보았습니다.

files="$(find -mtime -1)"
for file in "$files"
do
cp --parents --preserve -a file /somefolder

그러나 위의 for 루프는 동일한 문제를 일으키며 모든 파일이 복사됩니다. $files를 echo하면 필요한 파일만 표시됩니다.

어떻게 작동하게 할 수 있나요?

답변1

일부 구현에는 대상 디렉터리를 넣을 수 있는 옵션이 cp있습니다 .-t앞으로문서:

find . -mtime -1 -exec cp -a --parents -t /somefolder "{}" \+

이는 후자를 제거했음을 -a의미합니다 .--preserve

답변2

도움을 주신 모든 분들께 감사드리며, 이를 실현할 수 있도록 제안해 주셨습니다.

아래 코드를 사용하면 잘 작동합니다.

find /sourcefolder -type f -mtime -1 -exec cp -a "{}" /somefolder \;

다시 한 번 감사드립니다!

답변3

다음과 같이 사용할 수 있습니다 pax.

pax -wrT "11$(date +%H%M)," . /destination/folder

명령줄을 조금씩:

  • -wr- rite와 ead 옵션이 pax모두 주어졌을 때 복사됩니다 . 여기에서도 유용할 수 있습니다.-w-r(단, 위 명령에는 포함되지 않음)

    • -l잉크 - 가능하다면 파일 데이터를 복사하는 대신 하드링크를 생성합니다.

    • -Xpax동일한 소스 장치 및/또는 파일 시스템을 제한하는 데 사용됩니다 .

    • -s/src regex/replace/- 스트림에서 파일 이름을 수정합니다.

    • -verbose - 소스/대상 파일 보고용.

  • -T- -Time 옵션은 대상 아카이브용 파일을 선택합니다.(또는 와 함께 사용할 경우 그냥 복사 -wr)/m수정 또는 /cinodehange를 기반으로(아니면 둘다)이류. 수정 시간이 기본값입니다. 에서...

남자 공원

  • ...두 개의 파일 시간을 사용한 시간 비교는 pax를 사용하여 시간 기반 증분 아카이브를 생성할 때 유용합니다(지정된 시간 범위 내에서 변경된 파일만 아카이브됨).

  • 시간 범위는 6개의 서로 다른 필드로 구성되며 각 필드에는 두 자리 숫자가 포함되어야 합니다. 형식은 다음과 같습니다.

    [[[[[cc]yy]mm]dd]HH]MM[.SS]

  • 어디에 cc연도(세기)의 처음 두 자리, yy연도의 마지막 두 자리, 첫 번째 자리 는 mm월(01~12), dd일(01~31), HH일 시간(00~23), MM분(00~59), SS초(00~59). 분 필드는 MM필수이며, 다른 필드는 선택 사항이므로 다음 순서로 추가해야 합니다.

    HH, dd, mm, yy, cc

  • SS필드는 다른 필드와 독립적으로 추가할 수 있습니다. 시간 범위는 현재 시간을 기준으로 하므로...

    -T 1234/cm

  • ...오늘 오후 12시 34분 이후에 수정되거나 inode가 변경된 모든 파일을 선택합니다.

  • -T여러 시간 범위를 제공하고 첫 번째 일치 항목 확인을 중지할 수 있습니다.

...따라서 11내 예제 명령의 up은 오늘을 기준으로 합니다. 이는 오늘 날짜(12일)보다 하나 적고 나머지는 표준 "$(date)"형식이며 그 뒤에 쉼표가 붙습니다.

...제외 - 언급할 가치가 있는 마지막 사항 - 저는 대상 디렉터리에 절대 경로를 사용합니다. 이렇게 하면 여러분도 그렇게 해야 합니다. 이 문서의 모든 참조불특정 행동상대 대상 경로의 경우 - 처음 시도했을 때 pax절대 경로를 사용할 때까지 모든 이상한 결과에 혼란스러워 한 시간 동안 숨을 헐떡였습니다.

답변4

저는 똑같은 기능을 수행하고 있지만 폴더 구조를 유지해야 합니다. 그래서 제가 한 일은 조금 달랐습니다.

cd sourcedir
find . -type f -mtime -$days -print0 | tar -czvf ${tarpath}/testtar.tar.gz --null -T -

여기서 $days는 일수이고 $tarpath는 이러한 파일이 저장되는 임시 경로입니다. 회복하고 싶을 때.

cd $destdir
tar -xvzf ${tarpath}/testtar.tar.gz

이것은 나에게 효과적이었습니다.

참고: 백업하는 동안 특정 폴더를 제외하려면 다음 명령을 사용할 수 있습니다.

find . -type f -mtime -$days ! -path '*/FolderToavoidSearch/*' -print0 | tar -czvf ${tarpath}/testtar.tar.gz --null -T -

장점: 1. 항상 압축된 형식으로 마지막 복원 복사본을 가지고 있습니다.

  1. 또한 이력서 사이에 파일이 무엇인지 확인하고 모든 것이 정상이면 스크립트를 계속 실행할 수 있는 일시 중지가 있습니다.

  2. 폴더 구조를 유지하므로 원본 디렉터리에서 대상 디렉터리로 수정된 파일을 덮어씁니다.

참고: 반면에 요구 사항이 날짜로 제한되지 않는 경우 rsync를 사용합니다.

rsync -avz --exclude 'FolderToavoidSearch' --backup --backup-dir="/backup/dir/test/backup_$(date +\%Y-\%m-\%d)" /source/dir/ /dest/dir/

날짜가 포함된 rsyc에 대한 추가 정보여기

관련 정보