非常简单。
我怎么重命名
05_h.png 06_h.png
到
05_half.png 06_half.png
至少,我认为这是简单的,但它很难谷歌为这种事情,除非你已经知道。
谢谢。
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实用程序:
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
#!/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
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
man bash