라는 디렉토리가 있는데 crmlogs
어떻게 rsync -a --delete
삭제하나요?
mkdir emptydir
rsync -a --delete ./emptydir ./crmlogs
답변1
~에 따르면linuxnote.net 웹 아카이브rsync -aP –delete empty/ ./dir
또는 를 사용하는 것보다 약 3배 빠른 대용량 디렉터리를 삭제하는 가장 빠른 방법입니다.rm -rfv ./dir
find b/ -type f -delete
자세한 출력은 -P
시간이 걸리거나 영원히 빈 프롬프트 줄을 쳐다볼 수 있으므로 편리합니다.
awk
끝없는 스크롤을 피하기 위해 다음과 같이 단일 라인(라인 카운터 포함)에 출력을 표시 하도록 STDOUT을 리디렉션했습니다 .
rsync -aP --delete ./emptyDir/ ./dir/ | awk ' { printf ( "\r #%4d: %-200s", NR, $0 ) } '
건너뛰는 데 사용됨허가가 거부되었습니다좋습니다. sudo를 사용하세요.
sudo rsync -aP --delete ./emptyDir/ ./dir/ | awk'{printf("\r #%4d: %-200s",NR,$0)}'
설명: STDOUT만으로는 캡처할 수 없기 awk
때문에 라인 # 카운터 및 오른쪽 패드 라인 # 의 경우 출력 라인의 시작 부분에 커서를 설정하고 200자 출력 문자열의 경우 오른쪽 패드는 이전 라인을 덮어씁니다(터미널 창이 다음 위치에 있는 경우). 최소 이 너비는 200입니다)printf
\r
NR
%4d
%-200s
답변2
스위치는 --delete
소스에 존재하지 않는 파일을 대상에서 제거합니다. 을(를) 삭제하려면 crmlogs
해당 디렉터리가 포함되지 않은 소스에서 복사해야 합니다. 귀하의 예 rsync
에서는 루트 아래의 두 디렉터리 사이를 사용하는 방법을 보여줍니다 . 이 예를 보면 더 쉽게 알 수 있습니다 /tmp
.
/tmp $ cd tmp
/tmp $ mkdir foo
/tmp $ mkdir bar
/tmp $ mkdir bar/crmlogs
/tmp $ rsync -a --delete foo/ bar/
/tmp $ ls -l bar
total 0
drwxr-xr-x 2 mint mint 40 Jan 10 23:19 ./
drwxrwxrwt 10 root root 220 Jan 10 23:19 ../
참고하거나 rsync -a --delete foo bar
아래 에 rsync -a --delete ./foo ./bar
사본을 넣으세요 .foo
bar
귀하의 후속 의견으로 판단하면 실제로 디렉터리를 삭제하려는 것인지 crmlogs
, 아니면 소스에 더 이상 존재하지 않을 수 있는 일부 로그 파일을 지우려는 것인지 확실하지 않습니다. 그렇다면 --delete
해당 파일이 원본 폴더에서 제거되면 이 스위치가 작동할 것입니다.