【问题标题】:How to randomly select 50 files and copy them to different folder/directory (MacOS)?如何随机选择 50 个文件并将它们复制到不同的文件夹/目录(MacOS)?
【发布时间】:2018-07-26 15:26:27
【问题描述】:

我正在尝试从一个目录中随机选择 50 个文件(.nexus 文件)并将它们复制到一个单独的目标目录中。

我在一个问题页面上找到了以下脚本,该脚本涉及一个类似主题,随机选择 8 个项目:

shuf -zn8 -e *.jpg | xargs -0 cp -vt 目标/

shuf 打乱当前目录中的 *.jpg 文件列表。 -z 是以零结尾的每一行,以便正确处理带有特殊字符的文件。 -n8 在 8 个文件后退出 shuf。 xargs -0 读取由空字符分隔的输入(来自 shuf -z)并运行 cp。 -v 是详细打印每个副本。 -t 是指定目标目录。

在终端中输入时,我发现 -t 不是 MacOS 的有效命令。但是,删除它后,我似乎仍然无法让脚本正常工作。输入下面脚本的输出是:

用法:cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] 源文件目标文件 cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] 源文件...目标目录

我一直在使用的代码如下。我使用 gshuf 而不是 shuf,长文件路径是我要复制到的文件的目标目录。

我对编码等方面还很陌生,所以任何建议都将不胜感激!谢谢!

gshuf -zn50 -e *.nexus | xargs -0 cp -v ~/Users/brandon/Dropbox/Macbook/CH2_macrops_UCE_project/taxon-sets/all_outgroups3/macrops_randomly_sampled_50_A

【问题讨论】:

    标签: macos shell terminal bioinformatics


    【解决方案1】:

    正如您所说,您对此还很陌生,可能会坚持一些简单的事情

    cp $(ls | sort -R | head -50) targetdir/  
    

    cp 副本
    ls 列出您当前的目录(请注意,它仅在输出到屏幕时创建列)
    sort 订购从ls 获得的列表,但-R告诉它进行随机排序
    headsort 获得随机列表的顶部-50 告诉有多少

    $() 返回括号中内容的执行结果

    当然还有|在命令之间从左(输出)到右(输入)的管道文本

    【讨论】:

      【解决方案2】:

      你可以试试xargs的另一个参数:

      shuf -zn8 -e *.jpg | xargs -0 -I{} cp -v {} target/
      

      -I 允许您指定一个字符串来替换我的实际输入,这样xargs 就相当于:

      cp -v <file1> <file2> ... <fileN> target/
      

      在您的特定情况下:

      gshuf -zn50 -e *.nexus | xargs -0 -I{} cp -v {} ~/Users/brandon/Dropbox/Macbook/CH2_macrops_UCE_project/taxon-sets/all_outgroups3/macrops_randomly_sampled_50_A
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多