다음 명령을 사용하여 파일을 찾아 다른 곳에 복사합니다.
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
반면, 중간 변형은 .
경로 끝에 있는 소스 디렉터리를 참조하여 디렉터리 변경을 우회합니다.