重命名多个文件删除名称的第一部分

时间:2013-10-30 17:23:16

标签: bash shell batch-file file-rename

我有一个像这样的文件列表:

10_I_am_here_001.jpg
20_I_am_here_003.jpg
30_I_am_here_008.jpg
40_I_am_here_004.jpg
50_I_am_here_009.jpg
60_I_am_here_002.jpg
70_I_am_here_005.jpg
80_I_am_here_006.jpg

如何重命名目录中的所有文件,以便从文件名中删除^[0-9]+_

谢谢

4 个答案:

答案 0 :(得分:1)

使用纯BASH:

s='10_I_am_here_001.jpg'
echo "${s#[0-9]*_}"
I_am_here_001.jpg

然后,您可以在该目录中编写一个简单的for循环,如下所示:

for s in *; do
    f="${s#[0-9]*_}" && mv "$s" "$f"
done

答案 1 :(得分:1)

使用rename

rename 's/^[0-9]+_//' *

答案 2 :(得分:1)

这是另一个基于结尾.jpg的文件的bash想法,如上所示或者其他> VonBell

#!/bin/bash
ls *.jpg |\
while read FileName
do
    NewName="`echo $FileName | cut -f2- -d "_"`"
    mv $FileName $NewName
done

答案 3 :(得分:0)

使用bash扩展globbing

shopt -s extglob
for f in *
do
   [[ $f == +([0-9])_*.jpg ]] && mv "$f" "${f#+([0-9])_}"
done