如何随机 select 50 个文件并将它们复制到不同的 folder/directory (MacOS)?

How to randomly select 50 files and copy them to different folder/directory (MacOS)?

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

我在一个问题页面上发现了以下脚本,其中有 8 个项目是随机 select 的类似主题:

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] source_file target_file cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file ... target_directory

我一直在使用的代码如下。我使用 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

你可以试试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

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

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

cp
ls 列出您当前的目录(注意它只在输出到屏幕时生成列)
sort 对从 ls 获得的列表进行排序,但 -R 告诉它随机排序
headsort 中取随机列表的顶部 -50 告诉有多少

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

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