我有数千个图像文件,文件名开头附加了 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