-nPaAXz ~/
복사할 파일을 확인하기 위해 rsync 및 플래그를 사용하고 있습니다 .
이해하기에는 너무 긴 내용입니다.
특정 깊이로 복사될 파일/폴더 목록을 보기 위해 출력을 필터링하려면 어떻게 해야 합니까? 예를 들면 다음과 같습니다.
폴더 1개 깊이
/home/afile
/home/afolder/
/home/anotherfolder/
폴더 2개 깊이
/home/afile
/home/afolder/afile
/home/afolder/anotherfile
/home/afolder/afolder/
/home/anotherfolder/afile
답변1
다음 grep은 rsync의 자세한 출력을 2개의 폴더 깊이로 제한합니다.
rsync -nPaAXz src_dir dst_dir | grep -E '^/?([^/]+/?){0,2}$'
{0,2}
위의 내용을 변경하여 {0,3}
3개의 폴더를 필터링하세요. {0,4}
4개 폴더 깊이 등을 필터링합니다.
답변2
이 명령은 각 경로를 가져와서 n
깊은 폴더( \{0,n\}
명령 섹션 sed
과 {0,n}
grep 명령 섹션에 정의됨)로 자릅니다. 그런 다음 파이프를 통해 uniq
중복 항목을 필터링합니다.
rsync -nPaAXz src_dir dst_dir | sed -n 's@^\(\([^/][^/]*/\)\{0,2\}\).*@\1@p' | uniq
다음을 사용하여 동일한 효과를 얻을 수 있습니다 grep
.
rsync -nPaAXz src_dir dst_dir | grep -oE "^([^/]+/){0,2}"
GNU grep
위의 내용은 버전 에 적용되지 않지만< 2.5.3
허점.
답변3
이 경우에는 출력을 필터링하기만 하고 어떤 방식으로든 값을 재사용하는 데는 관심이 없습니다. 뭐, 쉽습니다. 원하는 것보다 더 많은 슬래시가 포함된 줄을 찾아내면 됩니다.
답변4
rsync -nPaAXz src_dir dst_dir | cut -d "/" -f 1-4 | awk '!x[$0]++'
cut은 4개 폴더 깊이 경로 이후의 모든 항목을 제거하고, awk는 중복 항목을 제거합니다.