rsync -a delete를 사용하여 많은 수의 파일이 포함된 디렉터리를 삭제하세요.

rsync -a delete를 사용하여 많은 수의 파일이 포함된 디렉터리를 삭제하세요.

라는 디렉토리가 있는데 crmlogs어떻게 rsync -a --delete삭제하나요?

mkdir emptydir
rsync -a --delete ./emptydir ./crmlogs

답변1

~에 따르면linuxnote.net 웹 아카이브rsync -aP –delete empty/ ./dir또는 를 사용하는 것보다 약 3배 빠른 대용량 디렉터리를 삭제하는 가장 빠른 방법입니다.rm -rfv ./dirfind 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\rNR%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사본을 넣으세요 .foobar

귀하의 후속 의견으로 판단하면 실제로 디렉터리를 삭제하려는 것인지 crmlogs, 아니면 소스에 더 이상 존재하지 않을 수 있는 일부 로그 파일을 지우려는 것인지 확실하지 않습니다. 그렇다면 --delete해당 파일이 원본 폴더에서 제거되면 이 스위치가 작동할 것입니다.

관련 정보