it-swarm.cn

将目录中的所有文件从$ filename_h重命名为$ filename_half?

死简单。

我该如何重命名

05_h.png
06_h.png

05_half.png
06_half.png

至少,我认为这很简单,但除非你已经知道,谷歌很难做到这一点。

谢谢....

112
Richard

只需使用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
243
bash-o-logist

尝试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
50
Michał Šrajer
for f in *.png; do
  fnew=`echo $f | sed 's/_h.png/_half.png/'`
  mv $f $fnew
done
9
Karoly Horvath

您在寻找纯粹的bash解决方案吗?有很多方法,但这里有一个。

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

这假设当前目录中以_h.png结尾的唯一文件是您要重命名的文件。

更具体地说

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

假设这两个例子是你唯一的例子。文件。

对于一般情况,文件重命名为 hasbeencoveredbefore

8
Sorpigal

使用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
4
Fredrik Pihl

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

rename [option] expression replacement file

所以你可以这样使用它

rename _h _half *.png

在代码中:'_ h'是您正在寻找的表达式。 '_half'是您要替换的模式。 '* .png'是您正在寻找可能的目标文件的文件范围。

希望这可以帮助c:

3
James Yen
for i in *_h.png ; do
  mv $i `echo "$i"|awk -F'.' '{print $1"alf."$2}'`
done
2
ztank1013

另一种方法可以手动使用批量重命名选项

右键单击文件 - >文件自定义命令 - >批量重命名,您可以替换h。一半。

这适用于使用WinSCP等基于linux的gui

1
Easwar

一个班轮:
for file in *.php ; do mv "$file" "_$file" ; done

0
Jadeye

使用rename实用程序:

[email protected]:/tmp/foo $ touch 05_h.png 06_h.png
[email protected]:/tmp/foo $ rename 's/_h/_half/' * 
[email protected]:/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
0
C. Ramseyer