단일 명령이나 줄을 사용하여 파일 목록에서 추출된 파일의 이름을 바꾸는 방법

단일 명령이나 줄을 사용하여 파일 목록에서 추출된 파일의 이름을 바꾸는 방법

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파일 유형 확장자 앞에 문자열을 추가합니다.

이름을 바꿀 파일.txt
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

관련 정보