2016-05-23 142 views
-1

如何将文件复制到硬盘上的许多随机位置?我在想像将文件复制到随机目录?

find ~ -type d -exec cp dat_boi.jpg {} \; 

但是,这将复制到每个目录,我只是想像磁盘上任何地方~100随机的。

+0

这些目录必须存在吗?如果您没有写入权限会发生什么? – 2016-05-23 12:50:53

+0

噢,他们必须是已经存在的目录。如果写权限是一个问题,我只是假定脚本会失败,特别是那个,并继续前进。 – jdt

+0

首先,执行'find'获取可能的目录列表并将列表保存到_lst.txt._然后,从_lst.txt_中随机选择N个项目,并将文件复制到这些目录中。 – boardrider

回答

1

单线程与bashshuf实用程序可以做到这一点。

/bin/cp -v dat_boi.jpg `find . -type d | shuf -n1` 

这会将dat_boi.jpg每个所指示shuf与参数作为与-v详细标志是可选看到正被复制的目标文件夹和和/bin/cp被称为返回一个随机路径-n1/bin/cp时间到新文件夹通过原生cp这将避免抛出一个讨厌的错误说文件存在,而不是文件覆盖。

查看正在对随机文件夹执行的副本。

$ find . -type d 
. 
./foo 
./bar 
./woo 

$ /bin/cp -v dat_boi.jpg `find . -type d | shuf -n1` 
`dat_boi.jpg' -> `./woo/dat_boi.jpg' 
$ /bin/cp -v dat_boi.jpg `find . -type d | shuf -n1` 
`dat_boi.jpg' -> `./bar/dat_boi.jpg' 
$ /bin/cp -v dat_boi.jpg `find . -type d | shuf -n1` 
`dat_boi.jpg' -> `./bar/dat_boi.jpg' 
$ /bin/cp -v dat_boi.jpg `find . -type d | shuf -n1` 
`dat_boi.jpg' -> `./woo/dat_boi.jpg' 
$ /bin/cp -v dat_boi.jpg `find . -type d | shuf -n1` 
`dat_boi.jpg' -> `./woo/dat_boi.jpg' 

为了满足您的使用情况,如果你能在一个循环中运行的命令说,100次,你可以观察shuf工作的randomity。

1

像这样的事情会做,但未必是超级强大的:

find . -type d | sort -R | head -n 5 | xargs -I {} cp myfile "{}" 

在纯英文:找到当前目录下的目录,随机排序,选择在这个随机列表顶部的五,并复制myfile给他们。

$ ls 
A C E G I K M  N P R T V X Z 
B D F H J L myfile O Q S U W Y 
$ find . -type d | sort -R | head -n 5 | xargs -I {} cp myfile "{}" 
$ tree 
. 
├── A 
├── B 
├── C 
├── D 
├── E 
├── F 
├── G 
├── H 
├── I 
│   └── myfile 
├── J 
├── K 
├── L 
│   └── myfile 
├── M 
│   └── myfile 
├── myfile 
├── N 
├── O 
├── P 
├── Q 
├── R 
│   └── myfile 
├── S 
├── T 
├── U 
├── V 
│   └── myfile 
├── W 
├── X 
├── Y 
└── Z 

tree只允许显示结果。