如何将文件复制到硬盘上的许多随机位置?我在想像
find ~ -type d -exec cp dat_boi.jpg {} \;
但是这会复制到每个目录,我只想在磁盘上的任何地方做〜100个随机的。
答案 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
仅允许显示结果。