从文件名中删除前导 10 位数字

从文件名中删除前导 10 位数字

我有数千个图像文件,文件名开头附加了 10 位数字。每个 10 个数字组成的字符串后面紧跟着一个下划线。它们看起来像这样:

1318487644_IMG_2158.jpg

我需要删除 10dig 数字和下划线,而不干扰接下来的内容,其结果应如下所示:

IMG_2158.jpg

我使用此命令来查找/替换文件名中其他不需要的内容:

ls -1 | while read file; do new_file=$(echo $file | sed s/foo/bar/g); mv "$file" "$new_file"; done

如何编辑上述命令以删除前导 10dig+下划线组合而不更改文件名的其余部分?

答案1

有些人认为解析ls输出是不好的做法。所以它可能看起来像这样(假设是 posix shell):

for file in /path/to/file/*
do
    part_to_remove=$(echo "$file" | grep -Eo '[[:digit:]]{10}_')
    if ! [ -z $part_to_remove ]; then
        new_file="${file#$part_to_remove}"
        mv "$file" "new_file"
    fi 
done

答案2

POSIXly:

for f in ./*; do
  mv -- "$f" "${f#./[0-9]*_}"
done

相关内容