../catkin_ws/src
을 현재 디렉토리와 동기화하려고하고 현재 스크립트가 현재 디렉토리에 있다고 가정합니다. 이해하는 한, 내용을 포함하여 최상위 디렉토리 만 동기화하려고하지만 상위 레벨에있을 가능성이있는 다른 유형의 노드는 동기화하지 말아야합니다 (즉, 바로 ../catkin_ws/src
또는 ./
). 그럼 쉽게 find
명령을 수행
: 다음 디렉토리 {}
스탠드가 발견
src_dir="../catkin_ws/src"
find "$src_dir" -mindepth 1 -maxdepth 1 -type d \
-exec cp -vru {} . \;
find ./ -mindepth 1 -maxdepth 1 -type d \
-exec cp -vru {} "$src_dir" \;
.
더 필터링하려면 -name
, -path
또는 -regex
과 같은 추가 옵션을 사용할 수 있습니다. 예를 들어, 디렉토리 x
다음 스킵 : 식, 즉, 거짓 NOT
논리 연산자의 일종으로 작용하는 경우가 !
find "$src_dir" -mindepth 1 -maxdepth 1 -type d \
! -name 'x' \
-exec cp -vru {} . \;
다음 식 원인은 True
를 반환한다.
위 명령의 단점은 cp
명령이 각 폴더에 대해 순차적으로 실행된다는 것입니다 (\;
). 모든 소스에 대해 단일 cp
명령을 실행하려면 this 대답에 설명 된 방법을 사용할 수 있습니다.
P.
필자는 디렉토리를 동기화하는 더 좋은 방법을 제안하지 않았지만 현재 접근 방식을 수정하는 방법을 제안했습니다.
'cp'의 메뉴얼 페이지를 읽는 중, 특정 파일을 제외시키는 옵션을 찾지 못했습니다. 당신이 할 수있는 한가지 해결 방법은'cp'와'-i' 플래그를 결합하여'expect' 스크립트와 함께 폴더를 대체 할 것인지 아닌지를 묻습니다. 그렇지 않으면 먼저 폴더에있는 기존 파일을 모두 나열하고 변수에 저장하고 제외 할 파일을 제거한 다음 cp 명령을 실행할 수 있습니다. – Aserre
대신 'rsync'를 사용하여 보려고합니다. 파일을 제외시킬 수있을뿐 아니라, 이미 동일한 파일 ('cp -u'보다 약간 똑똑합니다. 동일한 파일을 복사하여 새로운 타임 스탬프를 갖습니다)을 건너 뜁니다. – chepner