将目录中的所有文件从 $filename _ h 重命名为 $filename _ half?

非常简单。

我怎么重命名

05_h.png
06_h.png

05_half.png
06_half.png

至少,我认为这是简单的,但它很难谷歌为这种事情,除非你已经知道。

谢谢。

220806 次浏览
for f in *.png; do
fnew=`echo $f | sed 's/_h.png/_half.png/'`
mv $f $fnew
done

或者说一句俏皮话:

for f in *.png; do mv "$f" "$(echo $f | sed 's/_h.png$/_half.png/g')"; done

使用 rename实用程序:

rc@bvm3:/tmp/foo $ touch 05_h.png 06_h.png
rc@bvm3:/tmp/foo $ rename 's/_h/_half/' *
rc@bvm3:/tmp/foo $ ls -l
total 0
-rw-r--r-- 1 rc rc 0 2011-09-17 00:15 05_half.png
-rw-r--r-- 1 rc rc 0 2011-09-17 00:15 06_half.png

使用用 perl 编写的 rename实用程序。 可能是因为默认情况下它是不可用的..。

$ touch 0{5..6}_h.png


$ ls
05_h.png  06_h.png


$ rename 's/h/half/' *.png


$ ls
05_half.png  06_half.png

试试 rename命令:

rename 's/_h.png/_half.png/' *.png

更新:

例子用法:

创造一些内容

$ mkdir /tmp/foo
$ cd /tmp/foo
$ touch one_h.png two_h.png three_h.png
$ ls
one_h.png  three_h.png  two_h.png

测试方法:

$ rename 's/_h.png/_half.png/' *.png
$ ls
one_half.png  three_half.png  two_half.png
for i in *_h.png ; do
mv $i `echo "$i"|awk -F'.' '{print $1"alf."$2}'`
done

您是否正在寻找一种纯 bash 解决方案。

for file in *_h.png ; do mv "$file" "${file%%_h.png}_half.png" ; done

这里假设工作目录中以 abc 0结尾的文件是你想要重命名的文件。

更确切地说

for file in 0{5..6}_h.png ; do mv "$file" "${file/_h./_half.}" ; done

假设这两个示例是您唯一的.files。

对于一般情况,< a href = “ https://stackoverflow.com/questions/1086502/rename-multi-files-in-unix”> 中的文件重命名具有 已经被报道过了 前。

只需使用 bash,不需要调用外部命令。

for file in *_h.png
do
mv "$file" "${file/_h.png/_half.png}"
done

不要添加 #!/bin/sh

对于那些需要一句俏皮话的人:

for file in *.png; do mv "$file" "${file/_h.png/_half.png}"; done

另一种方法是手动使用批处理重命名选项

右键单击文件-> 文件自定义命令-> 批量重命名 你可以用一半代替 H。

这将工作基于 Linux 的 GUI 使用 WinSCP 等

一句话:
for file in *.php ; do mv "$file" "_$file" ; done

我有一个类似的问题: 在手册中,它将重命名描述为

rename [option] expression replacement file

所以你可以这样使用它

rename _h _half *.png

密码是: “ _ h”是您正在寻找的表达式。 “ _ half”是要替换的模式。 “ * . png”是您正在寻找可能的目标文件的文件范围。

希望这能对你有所帮助:

虽然 答案设定是完整的,我需要添加另一个缺失的一个。

for i in *_h.png;
do name=`echo "$i" | cut -d'_' -f1`
echo "Executing of name $name"
mv "$i" "${name}_half.png"
done

我不得不重命名文件的前缀,我发现 这个答案的解决方案如下:

for i in h_*; do mv ${i/#h_/half_}; done

如果模式以 # 开头,则它必须在 参数的扩展值。如果模式以% 开头,则它必须匹配 在参数展开值的末尾。

man bash