Bash

如何使用單個命令或行重命名從文件列表中提取的文件

  • November 13, 2018

我有一個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

有沒有辦法用一行或一條命令來完成這個?

bash

while read ; do mv "$REPLY" "${REPLY%.js}-orig.js" ; done < files-to-rename.txt

一種方法是讓 shell 從文件中讀取每一行,然後使用 shell 參數擴展來提取基本文件名和副檔名:

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如果輸出看起來正確,請刪除。

引用自:https://unix.stackexchange.com/questions/481333