32

私はこの単純な作業に直面していますが、それを行うための最も簡単で短い方法についても考えています。

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

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

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

4

7 に答える 7

62

shufとを組み合わせて使用​​しますxargs( を使用してドキュメントを参照することをお勧めしますman):

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

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

アップデート

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

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

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

于 2014-05-17T18:32:51.183 に答える
3

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
于 2012-12-25T20:44:00.203 に答える
2

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

于 2012-12-25T19:13:33.350 に答える