将文件复制到随机目录

  • 本文关键字:随机 文件 复制 bash
  • 更新时间 :
  • 英文 :


如何将文件复制到硬盘驱动器上的许多随机位置?我在想类似的事情

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工作的随机性。

相关内容

  • 没有找到相关文章

最新更新