find [...] -exec cp {} dest_dir \;에서 경로 명령을 선택하는 방법은 무엇입니까?

find [...] -exec cp {} dest_dir \;에서 경로 명령을 선택하는 방법은 무엇입니까?

경로를 제한하는 데 어려움을 겪고 있습니다 find.

나는이 명령을 가지고find ${DIR_PATH} -type f -name ".py" -exec cp --parent {} ${DEST_DIR} \;

이것은 나에게 다음과 같은 결과를 제공합니다.

${DIR_PATH}/a/main.py
${DIR_PATH}/a/b/resources.py
${DIR_PATH}/c/__init__.py
${DIR_PATH}/c/main.py

${DIR_PATH}이 디렉토리를 봤을 때 나는 확실히 알았습니다. 어떻게 얻을 수 있나요?

a/main.py
a/b/resources.py
c/__init__.py
c/main.py

목표는 대상 디렉터리에 다음 콘텐츠를 가져오는 것입니다.

${DEST_DIR}/a/main.py
${DEST_DIR}/a/b/resources.py
${DEST_DIR}/c/__init__.py
${DEST_DIR}/c/main.py

하지만 나는 이것을 가지고 있습니다 :

${DEST_DIR}/${DIR_PATH}/a/main.py
${DEST_DIR}/${DIR_PATH}/a/b/resources.py
${DEST_DIR}/${DIR_PATH}/c/__init__.py
${DEST_DIR}/${DIR_PATH}/c/main.py

참고: DIR_PATH및 는 DEST_DIRsh 파일의 시작 부분에 설정됩니다.

답변1

${DEST_DIR}절대 경로인 경우 이전에 cd현재 디렉터리에서 실행하는 것이 한 가지 방법일 수 있습니다 ${DIR_PATH}. find이렇게 하면 경로는 find모두 상대적입니다.

cd "${DIR_PATH}"
find . -type f -name ".py" -exec cp --parent {} "${DEST_DIR}" \;

( DEST_DIR절대 경로가 아닌 경우 $PWD앞에 from 접두사를 추가 하세요 cd.)

당신이 사용할 수있는 rsync.그것은 마치:

rsync -a --prune-empty-dirs --include "*/"  --include="*.py" --exclude="*"  "${DIR_PATH}/" "${DEST_DIR}" 

(뒤에 슬래시가 있음을 참고하세요 ${DIR_PATH})

관련 정보