여러 디렉터리에 파일 복사본을 만드는 방법은 무엇입니까?

여러 디렉터리에 파일 복사본을 만드는 방법은 무엇입니까?

폴더 구조가 있습니다

conf/
    widget1/
        env1.cfg
        env2.cfg
    widget2/
        env1.cfg
        env2.cfg
    widget3/
        env1.cfg
        env2.cfg
    widget4/
        env1.cfg
        env2.cfg
    ...

내가 하고 싶은 일은 이름이 지정된 모든 파일을 찾아서 env2.cfg이름이 지정된 디렉토리에 복사본을 만드는 것입니다 env3.cfg.

나는 시도했다:

find -name env2.cfg -exec cp '{}' "env3.cfg" ";"

하지만 방금 디렉토리 env3.cfg에 생성되었습니다.conf/

어떤 아이디어가 있나요?

명확히 하기 위해 Mac OSX에서 이 작업을 수행하고 있지만 가능하면 CentOS에서도 동일한 명령을 실행하는 것이 이상적입니다.

답변1

노력하다

find . -name env2.cfg -execdir cp {} env3.cfg \;

exec로 바꾸면 execdir"작업"( )이 파일( )이 있는 폴더 내에서 cp발생함을 의미합니다.env2.cfg

답변2

예제에서는 모든 env2.cfg 파일을 현재 작업 디렉터리인 "."에 복사합니다. 발견된 파일에 해당 디렉터리를 포함하여 새 이름을 지정해야 합니다. 이것은 나에게 효과적입니다.

for file in $(find . -name env2.cfg); do backup=$(echo $file | sed 's/env2.cfg/env3.cfg/'); cp $file $backup; done

편집: 또는 여러 명령을 사용하여 귀찮게 할 필요가 없는 더 우아한 방법입니다.

for file in $(find . -name env2.cfg); do cp $file ${file/env2/env3}; done

답변3

정적 구조이기 때문에 파일 이름을 직접 지정하고 쉘이 이를 복사하도록 할 수 있습니다.

for f in conf/widget*/env2.cfg
do
    cp "${f}" "${f/env2/env3}"
done

관련 정보