我在一个特定的目录中有A.js
, B.js
, C.js
,我想在bash shell中编写一个单一命令行来重命名这些文件_A,_B,_C。 我怎样才能做到这一点?
我试过find -name '*.sh' | xargs -I file mv file basename file .sh
find -name '*.sh' | xargs -I file mv file basename file .sh
但它不起作用,basename文件.sh不被识别为嵌套命令
怎么样
rename 's/(.*).js/_$1/' *.js
检查系统上重命名的语法。
上面的命令将A.js
重命名为_A
等。
如果你想保留扩展名,下面应该帮助:
rename 's/(.*)/_$1/' *.js
假设你仍然想在文件上保留扩展名,你可以这样做:
$ for f in * ; do mv "$f" _"$f" ; done
它将获得目录中每个文件的名称,并预先加上一个“_”。
一个简单的本地方式来做到这一点, 目录遍历 :
find -type f | xargs -I {} mv {} {}.txt
将最后重命名每个文件加入扩展名.txt。
而一个更普遍的并行化很酷的方式:
find -name "file*.p" | parallel 'f="{}" ; mv -- {} ${f:0:4}change_between${f:8}'