2016-05-23 140 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只允許顯示結果。