파일을 찾고 해당 디렉토리를 복사하는 방법은 무엇입니까?

파일을 찾고 해당 디렉토리를 복사하는 방법은 무엇입니까?

다음 명령을 사용하여 파일을 찾아 다른 곳에 복사합니다.

find /search/ -name file.txt -exec cp -Rp {} /destination \;

상위 디렉토리의 모든 파일과 하위 디렉토리를 복사하는 방법은 무엇입니까 file.txt?

예,

/search/test/sub
/search/test/sub2
/search/test/file.txt
/search/test/file.doc

다음과 같이 복사해야 합니다.

/destination/sub
/destination/sub2
/destination/file.txt
/destination/file.doc

답변1

(표준 조건자는 아니지만 자주 구현되는)을 사용하면 -execdir해당 유틸리티는 파일이 있는 디렉터리에서 실행됩니다.

이것은 당신이 할 수 있다는 것을 의미합니다

find /search -name file.txt -execdir cp -Rp . /destination \;

아니요 -execdir:

find /search -name file.txt -exec sh -c 'cp -Rp "${1%/*}/." /destination' sh {} \;

또는,

find /search -name file.txt -exec sh -c 'cd "${1%/*}" && cp -Rp . /destination' sh {} \;

마지막 두 변종은 발견된 각 파일에 대해 짧은 인라인 스크립트를 실행합니다. 스크립트는 파일의 경로 이름을 첫 번째 인수(in )로 사용하고 (표준 인수 대체)를 사용하여 $1경로 이름에서 파일 이름을 제거합니다. 그런 다음 첫 번째 변형과 동일한 명령을 ${1%/*}적용합니다 .cp-execdir

이를 수행하는 코드는 최상위 변형이 실제로 수행하는 작업을 cd보다 충실하게 에뮬레이션하는 -execdir반면, 중간 변형은 .경로 끝에 있는 소스 디렉터리를 참조하여 디렉터리 변경을 우회합니다.

관련 정보