【发布时间】:2019-07-07 14:52:57
【问题描述】:
我的目录包含 80.000 张图片,我想使用 Bash 命令从该目录随机插入 30.000 张图片 到另一个目录中。
【问题讨论】:
我的目录包含 80.000 张图片,我想使用 Bash 命令从该目录随机插入 30.000 张图片 到另一个目录中。
【问题讨论】:
假设您位于 80000 张图像所在的目录中,而您的另一个目录称为 target,这应该可以:
ls | shuf | head -n 30000 | xargs -i cp "{}" target/.
【讨论】:
xargs -i 已被弃用,您应该改用xargs -I
虽然提供的答案是正确的,但shuf 并未安装在所有系统上,因此您可以考虑改用sort -R。我引用手册页:
按随机顺序排序。这是输入的随机排列 除了相等的键排序在一起。它是由 散列输入键并对散列值进行排序。哈希函数 是随机选择的。哈希函数由 /dev/random 随机化 内容,或文件内容(如果由 --random-source 指定)。 即使指定了多个排序字段,相同的随机哈希 函数用于所有这些。
只要您没有任何重复项(完全相同的文件只是名称不同)并且您不想安装shuf 或任何其他工具,您就可以使用它来获得“随机”排序。
ls | sort -R | tail -n 30000 | xargs -I "{}" cp "{}" ./target
【讨论】:
-I 是执行此操作的新规范方式,但您的咒语是不完整的,除非您指定-I"{}",否则应该导致xargs: {}: No such file or directory ...另请注意shuf 是数量级比sort -R 快。