假设一个目录中有2000000个文件,即dir_source。
我想要的是随机选择3批100个文件,并将它们复制到3个独立的目录中,即dir_dist_1、dir_dist_2、dir_dist_3,而不重复(每个目标目录接收100个不同的文件(。有人知道怎么做吗?非常感谢任何帮助
我有一些可以工作的东西,尽管我没有在如此大规模的上尝试
此外,您还需要shuf
命令,该命令会打乱输入流
#This will list all files and shuffle them, outputting the first 300 to shuffled_list.txt
ls | shuf -n 300 -o shuffled_list.txt
#Create the three directories
mkdir dir_dist_{1..3}
#Get the first 100 lines from shuffled_list.txt and cp them to dir_dist_1
sed -n '1,100p' < shuffled_list.txt | xargs -I % sh -c 'cp % dir_dist_1'
sed -n '101,200p' < shuffled_list.txt | xargs -I % sh -c 'cp % dir_dist_2'
sed -n '201,300p' < shuffled_list.txt | xargs -I % sh -c 'cp % dir_dist_3'
列出目录中的文件,并用shuf打乱条目,只打印300个条目。通过管道将输出传输到awk
ls dir_source | shuf -n 300 | awk 'NR <= 100 { print $0" dir_dist_1" } NR > 100 && NR < 200 { print $0" dir_dist_2" } NR >= 200 { print $0" dir_dist_3" }' | xargs -I {} cp {} {}
如果记录编号/行号小于100,则打印文件名($0(和dir_dest_1,对最多200(dir_dest_2(和最多300(dir_dest _3(的行号执行相同操作。
通过管道将输出传递到xargs以运行复制命令。