如何将文件复制到硬盘驱动器上的许多随机位置?我在想类似的事情
find ~ -type d -exec cp dat_boi.jpg {} ;
但这会复制到每个目录,我只想在磁盘上的任何地方做~100个随机目录。
这样的事情可以,但可能不是超级健壮:
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
只允许显示结果。
bash
shuf
实用程序的单行代码可以做到这一点。
/bin/cp -v dat_boi.jpg `find . -type d | shuf -n1`
每次都会按照shuf
的指示将dat_boi.jpg
复制到新文件夹,参数返回一个随机路径-n1
,/bin/cp
带有-v
详细标志,该标志是可选的,以查看正在复制的目标文件夹,并且/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
工作的随机性。