폴더 구조가 있습니다
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