【问题标题】:Take limited files from directory and insert them into another directory从目录中获取有限的文件并将它们插入另一个目录
【发布时间】:2019-07-07 14:52:57
【问题描述】:

我的目录包含 80.000 张图片,我想使用 Bash 命令从该目录随机插入 30.000 张图片 到另一个目录中。

【问题讨论】:

    标签: bash macos directory


    【解决方案1】:

    假设您位于 80000 张图像所在的目录中,而您的另一个目录称为 target,这应该可以:

    ls | shuf | head -n 30000 | xargs -i cp "{}" target/.
    

    【讨论】:

    • 我必须先在 mac 上使用 brew install coreutils 安装 shuf,现在它可以工作了。谢谢
    • 很高兴听到! :)
    • 虽然答案是正确的,但xargs -i 已被弃用,您应该改用xargs -I
    【解决方案2】:

    虽然提供的答案是正确的,但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 快。
    猜你喜欢
    • 1970-01-01
    • 2020-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多