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
一种方法是要求 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
如果输出看起来正确,请删除。
答案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