使用前缀和升序重命名文件夹中的所有文件

时间:2017-05-25 08:52:13

标签: bash shell unix

如何重命名

random_files.jpg
that\ may\ contain\ spaces.jpg
and_differ_in_extensions.mp4

PREFIX_1.jpg
PREFIX_2.jpg
PREFIX_3.mp4

通过bash脚本?更正式地说,如何将目录中的所有文件重命名为PREFIX_N.ext形式的有序列表,其中.ext保留在原始文件名中。

我的尝试

for f in *; do 
    [[ -f "$f" ]] && mv "$f" "PREFIX_$f"
done 

仅更改前缀。

2 个答案:

答案 0 :(得分:1)

您可以使用*循环访问文件,然后使用带引号的var访问它们以保留所有特殊字符。

然后,您可以使用参数扩展将文件的开头删除到.,并将其附加到新文件名。

x=1;for i in *;do [[ -f "$i" ]] && mv "$i" "PREFIX_$((x++)).${i##*.}";done

如果您知道x尚未设置,但您可以在开始时移除作业并将$((x++))更改为$((++x))

答案 1 :(得分:1)

您可以使用find

在for循环中使用此功能
while IFS= read -rd '' file; do
   ext="${file##*.}"
   echo mv "$file" "PREFIX_$((++i)).$ext"
done < <(find . -type f -name '*.*' -maxdepth 1 -print0)

对输出感到满意后,请在echo命令之前删除mv