web-dev-qa-db-ja.com

Unix / LinuxOSで特定の数のランダムファイルを移動する方法

私はこの単純な課題に直面していますが、それを行うための最も簡単で短い方法は何かについても疑問に思っています。

私の提案は、指定された数のランダムファイルをディレクトリから別のディレクトリに移動することです。このタスクは、機械学習に必要な2つのデータセット(トレーニングセットとテストセット)の作成の一部です。私の目標は、ファイルの10%をディレクトリから移動して、カテゴライザーをテストできるdatasat agaistを取得し、ソースディレクトリからトレーニングセットを取得することです。

では、この「ランダムファイルの移動」タスクで最もコンパクトなタイピングは何でしょうか。

よろしくお願いします-いつものように-

20
Max

shufxargsの組み合わせを使用します(ドキュメントをmanで確認することをお勧めします):

shuf -n 10 -e * | xargs -i mv {} path-to-new-folder

上記のコマンドは、現在のフォルダーの10個のランダムファイルを選択します(* part)次に、それらを新しいフォルダに移動します。

更新

長くなりますが、このバージョンの方が理解しやすいかもしれません。

ls | shuf -n 10 | xargs -i mv {} path-to-new-folder

shufは、標準入力のランダム順列を生成し、結果を10に制限します(headを使用する場合と同様ですが、おそらくより高速です)。

29
boechat107

Shufまたはsort-Rを使用して、ファイルリストをシャッフルできます。ただし、サブセットを取得する必要があります。これは、ヘッド/テールで実行できます。

2
reivilos

0から32767までのintを生成するbashランダムジェネレーターを使用して、ファイルをset1またはset2のどちらに配置する必要があるかを選択できます。それはするでしょう:

for file in ./*; do
  val=$RANDOM
  if test $val -gt 3276; then
    mv "$file" ../set1
  else
    mv "$file" ../set2
  fi
done
2
jfg956

通常、これはpythonスクリプトまたはJavaプログラムで行います。どちらも、適切なRNGを使用してランダムな決定を行い、ファイルを移動するために必要な呼び出し。

0
bmargulies

質問はかなり古いですが、記録のためにこれはOSXで機能します。

gshufbrew install coreutilsをインストールしてから、次を使用する必要があります。

tenpercent=$((`ls | wc -l` * 10/100))

ls | gshuf -n $tenpercent | xargs -I {} mv {} destination/path/
0
Ettore Rizza