my-project
다음 파일 트리의 이름을 딴 프로젝트가 있습니다.
.
├── src
│ ├── index.html
│ ├── main.js
│ ├── normalize.js
│ ├── routes
│ │ ├── index.js
│ │ └── Home
│ │ ├── index.js
│ │ └── assets
│ ├── static
│ ├── store
│ │ ├── createStore.js
│ │ └── reducers.js
│ └── styles
└── project.config.js
지금 나는 원한다다음 파일의 이름을 바꿉니다.-orig
파일 유형 확장자 앞에 문자열을 추가합니다.
src/main.js
src/routes/index.js
src/store/reducers.js
project.config.js
(파일 내용을 전혀 변경하고 싶지 않습니다.)
최종 파일 트리는 다음과 같습니다.
내 프로젝트/(이후).
├── src
│ ├── index.html
│ ├── main-orig.js
│ ├── normalize.js
│ ├── routes
│ │ ├── index-orig.js
│ │ └── Home
│ │ ├── index.js
│ │ └── assets
│ ├── static
│ ├── store
│ │ ├── createStore.js
│ │ └── reducers-orig.js
│ └── styles
└── project.config-orig.js
한 줄이나 명령으로 이를 수행할 수 있는 방법이 있습니까?
답변1
존재하다 bash
:
while read ; do mv "$REPLY" "${REPLY%.js}-orig.js" ; done < files-to-rename.txt
답변2
한 가지 접근 방식은 쉘에 파일의 각 줄을 읽도록 요청한 다음 쉘 매개변수 확장을 사용하여 기본 파일 이름과 확장자를 추출하는 것입니다.
while IFS= read -r filename
do
base=${filename%.*}
extension=${filename##*.}
echo mv -- "my-project/$filename" "my-project/${base}-orig.${extension}"
done < files-to-rename.txt
echo
출력이 올바른 것으로 보이면 삭제하세요.
답변3
for i in `cat files-to-rename.txt`; do postfix=${i/#*\./}; mv $i ${i/%.$postfix/-orig.$postfix}; done;
이는 js뿐만 아니라 모든 접미사에서 작동합니다. 그러나 자신의 이익을 위해 git 또는 svn을 사용해 보십시오. tar 명령조차도 이보다 낫습니다.
답변4
rename
명령을 사용하십시오 . 먼저 아무것도 변경하지 않는 자세한 테스트 실행을 수행하십시오.
rename -n -v 's/.js$/-orig.js/' $(find my-project/)
이것이 올바른 것으로 보이면 제거하여 -n
실제로 파일 이름을 바꾸십시오.
rename -v 's/.js$/-orig.js/' $(find my-project/)
rename
참고: 다음 위치에 설치 예정더반또는우분투상자에서 다음을 실행합니다.
apt install rename