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

15 浏览
0 Comments

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

我有成百上千个相同格式的文件。我想通过提取前六个字符和扩展名来重命名这些文件。\n以下代码提取了前六个字符...我正在显示它们:\n

     for i in *.png; do echo $i | awk '{ print substr($0, 0, 7 )}'; done

\n我无法连接扩展名。有人能帮忙吗?如果脚本能够使用mv命令完成,那就太好了。\n谢谢。

0
0 Comments

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

原因:使用awk命令的代码片段用于重命名文件,但是存在一些问题,需要进行修改。

解决方法:将awk命令放在循环体外使用管道进行处理。修改后的awk命令打印出mv命令。在确保mv命令可以正确工作时,将-vn替换为-x(或不使用任何选项)。这种方法适用于几乎所有的shell。如果特别使用bash,则可以使用内置的字符串处理功能来完成所需的工作。还有其他很多选项可供选择,一些系统具有功能强大的rename命令(其他系统可能具有功能较弱的版本)。通过循环将每个文件名单独放在一行,而单个echo命令将所有文件名放在同一行上。可以使用awk脚本处理这种差异,但需要在输入记录的字段数上进行显式循环。可以编写一个简单的C程序,每行输出一个参数,非常有用。最后,作者建议根据自己的需求进行适应和修改。

代码如下:

for i in *.png; do echo $i; done |
awk '{ print "mv $0 " substr($0, 0, 7) ".png"}' |
sh -vn

作者提到的其他一些代码片段如下:

int main(int argc, char **argv) { while (*++argv != 0) puts(*argv); return 0; }

希望本文能够对使用shell脚本重命名文件的问题有所帮助。

0
0 Comments

问题的原因是要重命名所有的文件,使用shell脚本来实现。解决方法是使用for循环和mv命令来遍历所有的文件,并将文件名的前六个字符作为新的文件名。

以下是解决方法的代码:

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

这种方法非常酷。不知道有没有一本书包含所有这些酷的技巧。+1

解决方法可以在Bash参考手册中找到。这并不是“轻松阅读”,但如果你经常在Bash中工作,那么这个努力是值得的。

参考手册链接:Bash参考手册

0