我在这里遗漏了什么,这看起来很简单,但我无法让它工作。
我有一个目录,其中包含类似 AGPNDRAH01.jpg 的文件
我想要一个包含类似 AGPNDRAH01_00.jpg 的文件的目录
rename 's/(\w+).jpg\$1\_00.jpg$//' *
不起作用。Centos linux。我不明白为什么它不起作用。
答案1
快速破解将执行您在 bash 中描述的操作:
cd /directory
for F in `ls -1 |awk -F. '{print $2}'`
do
mv $F.jpg ${F}_00.jpg
done
对于重命名用法:
wmoore@bitbucket(/tmp/dowork)$ ls -1
1.jpg
2.jpg
3.jpg
4.jpg
5.jpg
wmoore@bitbucket(/tmp/dowork)$ rename .jpg _00.jpg *.jpg
wmoore@bitbucket(/tmp/dowork)$ ls -1
1_00.jpg
2_00.jpg
3_00.jpg
4_00.jpg
5_00.jpg
答案2
尝试以下 bash 脚本:
find . -type f -name "*.jpg" -print | while read FILE
do mv "${FILE}" "`dirname ${FILE}`/`basename ${FILE} .jpg`_00.jpg"
done
这将查找当前目录中或之下的所有 .jpg 文件,并在_00
之前插入.jpg
。如果您只希望它处理当前目录,请使用以下命令启动 find 命令:find . -maxdepth 1
答案3
正则表达式末尾的双反斜杠意味着s替代s/(\w+).jpg$1_00.jpg$带有一个空字符串。
我用的是这个:
rename 's/\.jpg/_00.jpg/' *.jpg
答案4
我有一个 redhat 版本,rename 不支持 's/' 命令。这里有一行代码(您必须使用反斜杠括号和加号才能在 sed 中使用此功能):
for fl in *.jpg; do mv $fl `echo $fl | sed 's/\(\w\+\).jpg/\1_00.jpg/'`; done