마지막 날 생성된 파일만 다른 폴더에 복사하는 스크립트를 작성 중입니다. 내가 겪고 있는 문제는 내 스크립트가 하루가 지나지 않은 파일뿐만 아니라 소스 디렉터리의 모든 파일을 복사한다는 것입니다.
이것이 내가 가진 것입니다:
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
잉크 - 가능하다면 파일 데이터를 복사하는 대신 하드링크를 생성합니다.-X
pax
동일한 소스 장치 및/또는 파일 시스템을 제한하는 데 사용됩니다 .-s/src regex/replace/
- 스트림에서 파일 이름을 수정합니다.-v
erbose - 소스/대상 파일 보고용.
-T
--T
ime 옵션은 대상 아카이브용 파일을 선택합니다.(또는 와 함께 사용할 경우 그냥 복사-wr
)/m
수정 또는/c
inodehange를 기반으로(아니면 둘다)이류. 수정 시간이 기본값입니다. 에서...
남자 공원
...두 개의 파일 시간을 사용한 시간 비교는 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. 항상 압축된 형식으로 마지막 복원 복사본을 가지고 있습니다.
또한 이력서 사이에 파일이 무엇인지 확인하고 모든 것이 정상이면 스크립트를 계속 실행할 수 있는 일시 중지가 있습니다.
폴더 구조를 유지하므로 원본 디렉터리에서 대상 디렉터리로 수정된 파일을 덮어씁니다.
참고: 반면에 요구 사항이 날짜로 제한되지 않는 경우 rsync를 사용합니다.
rsync -avz --exclude 'FolderToavoidSearch' --backup --backup-dir="/backup/dir/test/backup_$(date +\%Y-\%m-\%d)" /source/dir/ /dest/dir/
날짜가 포함된 rsyc에 대한 추가 정보여기