특정 파일 이름을 가진 파일을 찾고 해당 파일 위치에 파일을 복사한 다음 찾은 파일을 삭제하는 스크립트를 만들려고 합니다.
지금은 삭제 부분을 무시하고 현재까지 가지고 있는 내용은 다음과 같습니다.
find /path/to/searchdir -name "file.rtf" -exec cp -v "/path/to/filetocopy.rtf" `dirname {}` \;
불행히도, 찾은 파일의 인스턴스에 대해 "."을 반환하므로 디렉터리 이름을 올바르게 평가할 수 없는 것 같습니다.
답변1
find
다음 조치가 -execdir
더 적절해 보입니다.
find /path/to/searchdir -name file.rtf -execdir cp -v /path/to/filetocopy.rtf . \;
cp
이 작업은 이라는 파일이 포함된 모든 디렉터리에서 실행되므로 file.rtf
실행할 때마다 해당 디렉터리를 .
볼 수 있습니다.cp
cp
-delete
그런 다음 파일을 추가하거나 제거할 수 있습니다 (모든 것이 정상인지 확인한 후).
귀하의 방법이 작동하지 않는 이유는 쉘이 dirname {}
실행되기 전에 평가 find
하고 dirname {}
출력하기 때문입니다 .
. 그래서
find /path/to/searchdir -name "file.rtf" -exec cp -v "/path/to/filetocopy.rtf" `dirname {}` \;
~이 되다
find /path/to/searchdir -name "file.rtf" -exec cp -v "/path/to/filetocopy.rtf" . \;