Bash 以前缀和升序重命名文件夹中的所有文件
如何重命名Bash 以前缀和升序重命名文件夹中的所有文件,bash,shell,unix,Bash,Shell,Unix,如何重命名 random_files.jpg that\ may\ contain\ spaces.jpg and_differ_in_extensions.mp4 到 通过bash脚本?更正式地说,如何将目录中的所有文件重命名为一个有序的列表,其中前缀\u N.ext从原始文件名中保留.ext x=1;for i in *;do [[ -f "$i" ]] && mv "$i" "PREFIX_$((x++)).${i##*.}";done 下面是我的尝试 for f in
random_files.jpg
that\ may\ contain\ spaces.jpg
and_differ_in_extensions.mp4
到
通过bash脚本?更正式地说,如何将目录中的所有文件重命名为一个有序的列表,其中前缀\u N.ext
从原始文件名中保留.ext
x=1;for i in *;do [[ -f "$i" ]] && mv "$i" "PREFIX_$((x++)).${i##*.}";done
下面是我的尝试
for f in *; do
[[ -f "$f" ]] && mv "$f" "PREFIX_$f"
done
只更改前缀。您可以使用
*
循环文件,然后使用带引号的变量访问它们以保留所有特殊字符
然后,您可以使用参数扩展删除文件的开头,直到
,并将其附加到新文件名中
x=1;for i in *;do [[ -f "$i" ]] && mv "$i" "PREFIX_$((x++)).${i##*.}";done
如果您知道x尚未设置,但可以在开始时删除赋值,并将
$((x++)
更改为$(++x))
您可以在for循环中使用查找:
while IFS= read -rd '' file; do
ext="${file##*.}"
echo mv "$file" "PREFIX_$((++i)).$ext"
done < <(find . -type f -name '*.*' -maxdepth 1 -print0)
而IFS=read-rd“”文件;做
ext=“${file##*.}”
echo mv“$file”前缀_$(++i)).$ext
已完成<切换到目录并运行:for f in*;do[-f“$f”]&&mv“$f”前缀;完成
更改前缀。我喜欢“echo mv…”技术在运行脚本之前测试脚本。