如何使用shell脚本重命名所有文件?

如何使用shell脚本重命名所有文件?,shell,Shell,我有数百个相同格式的文件。我想通过使用前六个字符和扩展名来重命名这些文件 下面的代码提取前6个字符。。。我正在展示它们 for i in *.png; do echo $i | awk '{ print substr($0, 0, 7 )}'; done 我不能接分机。有人能帮忙吗。如果脚本可以用mv命令完成,那就太好了 谢谢假设每个文件名在扩展名之前至少有六个字符,您可以编写 for file in *.png ; do mv "$file" "${file:0:6}.png" ;

我有数百个相同格式的文件。我想通过使用前六个字符和扩展名来重命名这些文件

下面的代码提取前6个字符。。。我正在展示它们

     for i in *.png; do echo $i | awk '{ print substr($0, 0, 7 )}'; done
我不能接分机。有人能帮忙吗。如果脚本可以用mv命令完成,那就太好了


谢谢

假设每个文件名在扩展名之前至少有六个字符,您可以编写

for file in *.png ; do mv "$file" "${file:0:6}.png" ; done

如果继续使用
awk
,请在回路体外部安装管道:

for i in *.png; do echo $i; done |
awk '{ print "mv $0 " substr($0, 0, 7) ".png"}' |
sh -vn
修改后的
awk
打印
mv
命令。当您感到满意时,可以将
-vn
替换为
-x
(或不替换任何内容)


这几乎适用于任何shell。如果您具体使用的是
bash
,那么就有内置的字符串操作来完成您需要的工作-请参阅的答案,了解一种可能的技术。还有很多其他的选择;有些系统有一个功能强大的
rename
命令(其他系统则有一个功能较弱的版本)。

因此,您的所有文件都至少有6个字符+ext,如:123456.png?是的,它们在6个字符内都是唯一的,或者重复的都无关紧要。这个问题清楚地暗示了这一点。了解提问者对实际情况的信心会很有意思。相关问题:。这真的很酷。不知道是否有任何一本书包含所有这些很酷的黑客+1@JaypalSingh字体都在里面。是。不完全是“轻松阅读”,但是如果你在Bash中做了很多工作,这是非常值得的;不要重复$i;更简洁地写为
echo*.png
?循环和单个
echo
的区别在于循环将每个“单词”放在自己的行上,而单个
echo
将所有单词放在一行上。您也可以编写一个
awk
脚本来处理这个问题,但是您可以对输入记录中的字段数进行显式循环。我有一个简单的C程序,每行回显一个参数,并且发现它非常有用。多么琐碎?这很简单:
intmain(intargc,char**argv){while(*++argv!=0)put(*argv);返回0;}
,当然它也需要
#include
。谢谢,我没有想到一行对多行。好的,那么,让我们使用您可以使用的更posixy
printf'%s\n'*.png
:-);我很高兴没有这么做,但那是因为我很久以前就学会了shell,我上面写的东西(在shell级别上)在真正的旧系统和现代系统中都能工作。(最初的awk没有
substr()
命令。)基本上,让像我这样的化石慢慢石化,并适应你自己的目的。