如何在macOS终端使用gshuf或Python随机打乱文件夹内文件?
报错原因说明
gshuf的设计逻辑是接收文本内容或者单个文件作为输入,不能直接读取目录。你直接执行无参数的gshuf时,程序会等待标准输入流输入内容,所以会出现无响应的情况;直接传入文件夹路径时,程序无法读取目录内容,就会抛出Is a directory的错误。
用gshuf实现文件顺序打乱的正确方法
- 先确保已经通过Homebrew安装coreutils,未安装可执行:
brew install coreutils - 进入目标文件夹后,执行以下命令即可输出打乱后的文件列表:
ls | gshuf - 如果需要将打乱后的列表保存到本地文件,追加重定向即可:
ls | gshuf > 打乱后的文件列表.txt - 如果需要让文件在Finder中展示的顺序也被打乱,可以通过添加随机数字前缀重命名实现,执行前可以先去掉末尾的
| bash预览生成的命令,确认无误后再执行:ls | gshuf | awk 'BEGIN{count=1}{printf "mv \"%s\" %04d_%s\n", $0, count++, $0}' | bash
注意:重命名操作不可逆,操作前请务必备份重要文件
用Python实现相同需求
可以直接在终端调用系统自带Python完成操作,无需安装额外依赖:
- 仅输出打乱后的文件列表,执行:
python3 -c "import os, random; files = [f for f in os.listdir('.') if os.path.isfile(f)]; random.shuffle(files); print('\n'.join(files))" - 要实现重命名打乱Finder展示顺序,同样建议先注释掉
os.rename行预览结果后再执行:python3 -c "import os, random; files = [f for f in os.listdir('.') if os.path.isfile(f)]; random.shuffle(files); for i, f in enumerate(files, 1): os.rename(f, f'{i:04d}_{f}')"
注意:重命名前请备份文件避免数据损失
内容的提问来源于stack exchange,提问作者Yogesh Riyat
相关产品推荐
相关产品推荐

