将文件复制到随机目录?

时间:2016-05-23 12:47:54

标签: bash

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

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

但是这会复制到每个目录,我只想在磁盘上的任何地方做〜100个随机的。

2 个答案:

答案 0 :(得分:1)

使用bash shuf实用程序的单行程可以解决问题。

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

每次dat_boi.jpg按照shuf的指示将-n1复制到新文件夹,其中参数为返回一个随机路径/bin/cp-v /bin/cp详细flag是可选的,用于查看正在复制的目标文件夹,并且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' 调用,这将避免抛出一个令人讨厌的错误,说文件存在而不是文件覆盖。

要查看正在对随机文件夹执行的复制。

shuf

为了适合您的使用案例,如果您可以循环运行该命令,请说100次,您可以观察top: 50%工作的随机性。

答案 1 :(得分: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仅允许显示结果。