私はこの単純な課題に直面していますが、それを行うための最も簡単で短い方法は何かについても疑問に思っています。
私の提案は、指定された数のランダムファイルをディレクトリから別のディレクトリに移動することです。このタスクは、機械学習に必要な2つのデータセット(トレーニングセットとテストセット)の作成の一部です。私の目標は、ファイルの10%をディレクトリから移動して、カテゴライザーをテストできるdatasat agaistを取得し、ソースディレクトリからトレーニングセットを取得することです。
では、この「ランダムファイルの移動」タスクで最もコンパクトなタイピングは何でしょうか。
よろしくお願いします-いつものように-
shuf
とxargs
の組み合わせを使用します(ドキュメントを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
を使用する場合と同様ですが、おそらくより高速です)。
Shufまたはsort-Rを使用して、ファイルリストをシャッフルできます。ただし、サブセットを取得する必要があります。これは、ヘッド/テールで実行できます。
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
通常、これはpythonスクリプトまたはJavaプログラムで行います。どちらも、適切なRNGを使用してランダムな決定を行い、ファイルを移動するために必要な呼び出し。
質問はかなり古いですが、記録のためにこれはOSXで機能します。
gshuf
とbrew install coreutils
をインストールしてから、次を使用する必要があります。
tenpercent=$((`ls | wc -l` * 10/100))
ls | gshuf -n $tenpercent | xargs -I {} mv {} destination/path/