在Bash中,可以在一行上完成“mv-for循环”吗?

时间:2013-03-23 21:40:32

标签: bash for-loop

我经常要求输入

#!/usr/bin/bash
for i in files-*
do
    mv $i ${i/files/items}
done

这可以更简单吗?

3 个答案:

答案 0 :(得分:2)

在一行中:是的。更简单:可能不是。

for i in files-*; do mv "$i" "${i/files/items}"; done

如果您经常需要这样的东西,可以将它封装在一个函数中,然后调用该函数。或者在首选编辑器中定义某种模板/文本块/宏。

答案 1 :(得分:1)

如果您安装了perl,则可以使用rename

rename 's/files/items/' files-*

答案 2 :(得分:1)

它不会比安斯加已经提出的要短得多。但是,您可以通过几种机制保存一些输入:

Bash命令历史记录

使用bash的command history来调用命令。不完全是高科技,但这可以为您节省大量的打字,而且您无需在系统上保存/更改任何内容。

脚本文件

将命令放在脚本文件中,保存在路径中的某个位置。

 #/bin/bash
 for i in files-*; do 
     mv $i ${i/files/items} 
 done

在这种情况下,我会保留多条线以优化可读性

别名

为您的.bashrc文件添加alias命令

 alias movem='for i in files-*; do mv $i ${i/files/items}; done'

完成后,只需输入别名即可运行该命令。这样做的一个优点是您不必创建脚本文件。

ps:/usr/bin/bash ???你在用什么系统?