2016-05-23 4 views
-1

ファイルをハードドライブの多数のランダムな場所にコピーするにはどうすればよいですか?私はどこでも、ディスク上の〜100のランダムなもののようにやってみたい、私はファイルをランダムなディレクトリにコピーしますか?

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

のようなものを考えていたしかし、それはすべてのディレクトリにコピーします。

+0

これらのディレクトリは存在する必要がありますか?書き込み権限がないとどうなりますか? –

+0

ああ、彼らはすでに存在するディレクトリでなければならない。書き込み権限が問題であれば、私はそのスクリプトが特に失敗して失敗すると思っていました。 – jdt

+0

まず、 'find'を実行して可能なディレクトリのリストを取得し、そのリストを_lst.txtに保存します。_次に、_lst.txt_からN個のアイテムをランダムに選択し、ファイルをこれらのディレクトリにコピーします。 – boardrider

答えて

1

bashshufと1ライナーがこのトリックを行うことができます。

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

このコピーコピーされるとと/bin/cpが呼び出されるターゲットフォルダを見ることが任意である-v冗長フラグをランダムに一つのパス-n1を返すように引数をshufによって指示されるように、新しいフォルダにdat_boi.jpg都度、/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 "{}" 

:、カレントディレクトリからのディレクトリを見つけるランダムに並べ替え、このランダムなリストの一番上に5を選択し、コピーそれらに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しか結果を表示することができません。

関連する問題