如何重命名
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
仅更改前缀。
答案 0 :(得分:1)
您可以使用*
循环访问文件,然后使用带引号的var访问它们以保留所有特殊字符。
然后,您可以使用参数扩展将文件的开头删除到.
,并将其附加到新文件名。
x=1;for i in *;do [[ -f "$i" ]] && mv "$i" "PREFIX_$((x++)).${i##*.}";done
如果您知道x尚未设置,但您可以在开始时移除作业并将$((x++))
更改为$((++x))
答案 1 :(得分:1)
您可以使用find
:
while IFS= read -rd '' file; do
ext="${file##*.}"
echo mv "$file" "PREFIX_$((++i)).$ext"
done < <(find . -type f -name '*.*' -maxdepth 1 -print0)
对输出感到满意后,请在echo
命令之前删除mv
。