我在某个目录中有A.js
,B.js
,C.js
,我想在bash shell中编写一个SINGLE命令行来重命名这些文件_A,_B,_C。我怎样才能做到这一点?在bash中重命名多个文件
我试图find -name '*.sh' | xargs -I file mv file basename file .sh
,但它不工作,基本名称的文件.SH不被识别为一个嵌套的命令
我在某个目录中有A.js
,B.js
,C.js
,我想在bash shell中编写一个SINGLE命令行来重命名这些文件_A,_B,_C。我怎样才能做到这一点?在bash中重命名多个文件
我试图find -name '*.sh' | xargs -I file mv file basename file .sh
,但它不工作,基本名称的文件.SH不被识别为一个嵌套的命令
如何
rename 's/(.*).js/_$1/' *.js
检查语法您的系统上重命名。
以上命令将重命名为A.js
至_A
&等等。
如果你想保留的延长,下面应该有所帮助:
rename 's/(.*)/_$1/' *.js
假设你仍想保留的文件扩展名,你可以这样做:
$ for f in * ; do mv "$f" _"$f" ; done
它将得到目录中每个文件的名称,并预先加上一个“_”。
如果我理解他是对的,他也想删除文件扩展名。 – pduersteler 2013-03-13 08:37:19
非常感谢! 我这样修改代码: for * in *;做mv“$ f”“_ $(basename $ f .sh)”;完成 ,它运作良好! – andPat 2013-03-13 08:50:23
@ user1703524太棒了!实际上我正要以几乎非常类似的方式编辑帖子。很高兴它的工作。 – 2013-03-13 08:52:21
一个简单的原始的方式来做到这一点,与目录遍历:
find -type f | xargs -I {} mv {} {}.txt
将重命名到位的每个文件最后添加扩展名.txt。
而且随着并行更一般的冷静的方式:
find -name "file*.p" | parallel 'f="{}" ; mv -- {} ${f:0:4}change_between${f:8}'
我试图找到-name '* .SH' | xargs -I文件mv文件'基本文件.sh' 但它不起作用,基本名称文件.sh不被识别为嵌套命令 – andPat 2013-03-13 08:30:07
欢迎使用stackoverflow。请阅读FAQ和http://whathaveyoutried.com,然后编辑您的问题。 – pduersteler 2013-03-13 08:30:08
我看过那篇文章,你说得对,文章的作者也是对的。但是如果你必须解决10个问题,并解决其中一个问题会产生一个新问题(在我的情况下重新命名这些文件),并且你有很少的时间(因为你的老板正在等待所有10个问题的解决方案)将您是直接要求解决方案还是要求解决方案而没有精确解决方案?后者可能更好,但如果你有很少的时间?我认为有时只要求解决方案是必要的。 关心并感谢您向我指出这个问题。 – andPat 2016-01-20 10:49:23