Linux命令行无需编写脚本如何随机打乱编号文件序号并重命名
Linux下无脚本随机打乱1-500.txt编号的实现方案
直接用系统默认预装的GNU coreutils工具就能实现,不需要写独立脚本、不需要额外安装软件,两行终端命令即可完成,全程不会出现文件覆盖、编号重复/遗漏的问题:
- 第一步:先给所有目标文件加临时前缀,规避重命名过程中的文件名冲突
for i in {1..500}.txt; do mv -- "$i" "tmp_$i"; done
- 第二步:生成1-500的无重复随机序列,按顺序对应重命名临时文件,完成编号随机映射
paste <(ls tmp_*.txt | sort -t_ -k2 -n) <(seq 1 500 | shuf) | while read old new; do mv -- "$old" "$new.txt"; done
逻辑说明
- 先加
tmp_前缀是核心:如果直接原地重命名,很容易出现「原67.txt还没重命名,就被改完名的1.txt覆盖」的问题,临时前缀可以彻底隔离新旧文件名 shuf是系统自带的随机排序工具,会输出1到500的无重复乱序序列,保证最终文件名刚好覆盖1.txt到500.txt,没有重号、没有漏号- 命令里的
--是处理特殊文件名的保险写法,当前场景虽然文件名都是纯数字加后缀,加上可以兼容更通用的情况
注意:执行前请确认当前目录下没有以
tmp_开头的.txt文件,避免误操作改动原有文件;稳妥起见可以先复制一份测试文件到空目录跑通流程,再在目标目录执行。
内容的提问来源于stack exchange,提问作者ryes31
相关产品推荐
相关产品推荐

