我试图从目录中随机选择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
答案 0 :(得分:2)
正如您所说的那样,您可能还很陌生
cp $(ls | sort -R | head -50) targetdir/
cp
副本
ls
列出您当前的目录(请注意,它仅在输出到屏幕时才创建列)
sort
对从ls
获得的列表进行排序,但是-R
告诉它进行随机排序
head
在sort
-50
的随机列表中排名第一
$()
返回执行括号中的内容的结果
当然还有|
在命令之间从左(输出)到右(输入)的管道
答案 1 :(得分:0)
您可以尝试使用其他参数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