You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何递归地随机化文件名?

如何递归地随机化文件名?

嘿,我来帮你搞定这个递归重命名的问题!你原来的脚本在单个目录里用得很好,要扩展到所有子目录的话,有几种简单实用的方法可以实现:

方法一:使用 find 命令(最通用的方式)

find 命令天生擅长递归遍历目录,我们可以把它和你原有的重命名逻辑结合起来,一次性处理所有子目录里的 .png 文件:

find . -type f -name "*.png" -exec bash -c 'mv -- "$0" "$(dirname "$0")/$RANDOM-$RANDOM-$RANDOM.png"' {} \;

我给你拆解一下这个命令的逻辑:

  • find . -type f -name "*.png":从当前目录(.)开始,查找所有类型为普通文件(-type f)且后缀是 .png 的文件
  • -exec bash -c '...' {} \;:对每一个找到的文件执行后面的bash命令,{} 会自动替换成当前找到的文件完整路径
  • $(dirname "$0"):获取当前文件所在的目录,确保重命名后的文件还留在原来的目录里,不会跑到当前工作目录
  • $RANDOM-$RANDOM-$RANDOM.png:和你原来的逻辑一致,生成由三组随机数组成的新文件名

方法二:用 Bash 的 globstar 选项(适合 Bash 4+ 版本)

如果你用的是 Bash 4 或更高版本,可以开启 globstar 选项,它能让通配符 ** 递归匹配所有子目录,写法和你原脚本几乎一样:

先开启这个选项(如果还没开的话):

shopt -s globstar

然后执行重命名脚本:

for file in **/*.png; do
    mv -- "$file" "$(dirname "$file")/$RANDOM-$RANDOM-$RANDOM.png"
done

这个方法只是把你原脚本里的 *.png 换成了 **/*.png,** 会帮你遍历当前目录下所有层级的子目录里的 .png 文件。要是你想每次打开终端都自动开启 globstar,可以把 shopt -s globstar 加到你的 ~/.bashrc 文件里。

小提醒

  • 命令里的 -- 是为了兼容那些文件名开头带 - 的文件,避免 mv 把它们当成命令选项处理
  • 虽然 $RANDOM 生成重复值的概率极低,但如果你的文件数量特别多,也可以用更唯一的标识符,比如 $(uuidgen) 替换 $RANDOM-$RANDOM-$RANDOM,生成的文件名会类似 a1b2c3d4-1234-5678-90ab-cdef01234567.png,完全不会重复

备注:内容来源于stack exchange,提问作者Nuno Fonseca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 08:39:40