특정 깊이까지 경로 필터링

특정 깊이까지 경로 필터링

-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는 중복 항목을 제거합니다.

관련 정보