linux shell命令mv很多文件

时间:2016-10-20 09:31:17

标签: linux shell mv

我有很多文件,例如 1a1,2a2,3a3 ,我想将文件名转换为 1b1,2b2,3b3 。这意味着将' 替换为这些文件名中的'

我尝试过如下命令:

for f in */*; do
  mv "$f" "${f/a/b}"
done
ls | xargs -i mv {} ${{}/a/b}  
ls | xargs -i mv {} \`echo {}|tr -t 'a' 'b'\`

但没有效果。 我知道一个命令 重命名' a' ' B' * 能行得通。

但我仍想弄清楚如何使用与for有关的xargsother cmds来完成这项工作。毕竟,在每天使用中,它们都比简单的rename命令更通用。

请帮帮我,谢谢。

3 个答案:

答案 0 :(得分:2)

#!/bin/bash
for old in *
do new=$(echo "$old" | sed -e 's/a/b/')
   echo mv "$old" "$new" &>2
   mv "$old" "$new"
done

在您学习如何使用sed(1)命令进行名称转换时,此示例将允许您猜测更复杂的名称转换。

程序将所有命令行参数传递给for循环,在每个循环中,程序获得一个新变量new,其中包含原始$old名称的转换。然后,您只需要使用旧值和新值执行命令。

答案 1 :(得分:1)

以防万一你想知道重命名:

rename 's/(.*)a(.*)/$1b$2/' *

答案 2 :(得分:0)

这个简单的bash脚本可能适合您,但假设文件长度正好为3个字符(请参阅?a?的{​​{1}}标记中的-name)和{{1在中间。

find

您可以看到它的工作方式如下

a