Bash
如何使用單個命令或行重命名從文件列表中提取的文件
我有一個
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
如果輸出看起來正確,請刪除。