![디렉터리에 있는 파일 이름의 하위 문자열 바꾸기](https://linux55.com/image/42782/%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EC%97%90%20%EC%9E%88%EB%8A%94%20%ED%8C%8C%EC%9D%BC%20%EC%9D%B4%EB%A6%84%EC%9D%98%20%ED%95%98%EC%9C%84%20%EB%AC%B8%EC%9E%90%EC%97%B4%20%EB%B0%94%EA%BE%B8%EA%B8%B0.png)
여러 수준의 하위 디렉터리를 포함하는 디렉터리가 존재합니다. 이 디렉토리 아래에는 이름에 공통 단어가 포함된 파일 세트가 있습니다. 예를 들어 .cc
이 .cc
파일 이름의 을 .cpp
?
답변1
파일 "이름에 일반적인 단어가 포함되어 있습니다"라고 말할 때 파일이 확장자를 공유한다는 사실을 언급하고 있다고 가정합니다 .cc
. 그렇다면 다음을 사용하십시오.자일스의 대답은 여기에 있습니다목표를 달성하기 위해 명령을 작성할 수 있습니다.
find -type f -exec sh -c '
for file; do [ "${file##*.}" = "cc" ] &&
mv -- "$file" "${file%.cc}.ccp"; done
' -- {} +
바라보다SO에 대한 이 답변더 알아보기
답변2
zsh에서:
autoload zmv
zmv '(**/)(*).cc' '$1$2.cpp'
Bash ≥4에서:
for x in **/*.cc; do mv "$x" "${x%.cc}.cpp"; done
모든 셸에서:
find -name '*.cc' -exec sh -c 'for x; do mv "$x" "${x%.cc}.cpp"; done' _ {} +
더 간단하고 이전 시스템에 이식 가능하지만 약간 느립니다.
find -name '*.cc' -exec sh -c 'mv "$0" "${0%.cc}.cpp"' {} \;