여러 파일의 이름을 바꾸는 Unix 명령

여러 파일의 이름을 바꾸는 Unix 명령

plugin-cfg.xml백업하고 동일한 디렉토리에 보관하려는 다른 파일이 포함된 일부 디렉토리가 있습니다 .

예를 들어

Plug6_a1/plugin-cfg.xml
Plug6_a2/plugin-cfg.xml
Plug6_a3/plugin-cfg.xml

각 디렉토리에 plugin-cfg.xml이름 바꾸기를 복사하는 방법은 무엇입니까?plugin-cfgbk.xml

답변1

find Plu*_a* -type f -name plugin-cfg.xml -exec \
  sh -c 'cp "$1" "$(dirname "$1")"/plugin-cfgbk2.xml ' sh {} \;  

이름이 로 시작하고 포함된 디렉토리에 있는 각 파일에 대해 plugin-cfg.xml동일한 디렉토리에 의 복사본을 만듭니다.Plu_aplugin-cfg.xmlplugin-cfgbk2.xml

답변2

dest=/path/to/backup/destination;
find plu6_a1 plu61_a2 -type f -iname '*.xml' -print0 | while IFS= read -rd '' f; do
    cp -- "$f" "${dest%/}/${f%.xml}-bk.xml"
done

plu6_a1 plu61_a2에서 각 XML 파일을 찾아 복사본을 만들고 복사본에 접미사 -bk.xml을 추가한 다음 "$dest"로 이동합니다.

편집: 이 코드는 Bash로 작성되었으며 GNU 또는 BSD find(1)도 필요합니다.

답변3

필요한 한 줄은 다음과 같습니다 /bin/sh(그러나 이는 단일 디렉터리에서만 작동합니다).

for f in ./*.xml; do cp "$f" "${f%cfg.xml}cfgbk.xml"; done

bash 4+가 있다고 가정하면(모른다면 아마도 알고 있을 것입니다. 확인 bash --version) 재귀에 globstar를 사용할 수 있습니다.

shopt -s globstar
for f in ./**/*.xml; do cp "$f" "${f%cfg.xml}cfgbk.xml"; done

그러나 백업에 대해 보다 명확한 이름 지정 체계를 채택하는 것을 고려할 수도 있습니다. 저는 파일 이름에 ".backup"과 같은 것을 추가하는 것을 선호합니다.

shopt -s globstar
for f in ./**/*.xml; do cp "$f" "$f".backup; done

관련 정보