linux shell 命令 mv 多个文件
linux shell command mv many files
我有很多文件,例如 1a1、2a2、3a3,我想将文件名 mv 为 1b1、2b2、3b3。意思是把这些文件名中的'a'替换成'b'
我试过这样的命令:
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'\`
但 none 有效。
我知道一个命令
重命名 'a' 'b' *
能行得通。
但我还是想弄清楚如何利用for
、xargs
和other cmds
来完成这项工作。毕竟,在日常使用中,它们比简单的rename
命令要通用得多。
请帮助我,谢谢。
以防万一你想知道重命名:
rename 's/(.*)a(.*)/b/' *
#!/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
名称进行改造。然后你只需要用旧值和新值执行命令。
我有很多文件,例如 1a1、2a2、3a3,我想将文件名 mv 为 1b1、2b2、3b3。意思是把这些文件名中的'a'替换成'b'
我试过这样的命令:
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'\`
但 none 有效。 我知道一个命令 重命名 'a' 'b' * 能行得通。
但我还是想弄清楚如何利用for
、xargs
和other cmds
来完成这项工作。毕竟,在日常使用中,它们比简单的rename
命令要通用得多。
请帮助我,谢谢。
以防万一你想知道重命名:
rename 's/(.*)a(.*)/b/' *
#!/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
名称进行改造。然后你只需要用旧值和新值执行命令。