何千もの画像を含むフォルダーがあります。これらのイメージはペアで提供され、一方には のような名前が付けapple_0_2_3_suffix1.png
られ、もう一方には のような名前が付けられapple_0_2_3_suffix2.png
ます。これらのペアの 70% をランダムに選択して別のフォルダーに移動する Bash スクリプトを書きたいと思います。
これどうやってするの?
何千もの画像を含むフォルダーがあります。これらのイメージはペアで提供され、一方には のような名前が付けapple_0_2_3_suffix1.png
られ、もう一方には のような名前が付けられapple_0_2_3_suffix2.png
ます。これらのペアの 70% をランダムに選択して別のフォルダーに移動する Bash スクリプトを書きたいと思います。
これどうやってするの?
これどうやってするの?
1つのアイデアがあります:
apple*suffix1.png
suffix1.list
suffix1.list
これで、70% がファイル (またはその中の行) の数、たとえばn
行数であることがわかります。shuf
ファイルの最初のn
行だけを取得します。(shuf コマンドを使用できます)mv
コマンドを生成するか、a を使用しfor loop
てファイルを dest dir に移動できます。重要なのは、1 つの「mv」コマンドを出力するか、1 つのファイルを移動するときは、対応するファイルを別の接尾辞で印刷/移動する必要があることです2。ノート
suffix1.list
スクリプトを 1 つ記述すれば、ファイルの保存を避けることができます。ファイルを使用すると、プロセスが簡単になる可能性があるためです。また、私の考えを説明する方が簡単です。
「アイデアが役に立たない場合はお知らせください。実行中のコードが欲しいだけです。」
編集操作はコードを必要とします:
suf1
1)ファイル リストをシミュレートします。
kent$ seq -f "apple_%03g_suf1.png" 20 > suf1.txt
ファイルを取得するには、find/ls などを実行する必要があります。私のファイルは次のようになります。
kent$ cat suf1.txt
apple_001_suf1.png
apple_002_suf1.png
apple_003_suf1.png
apple_004_suf1.png
apple_005_suf1.png
...
apple_020_suf1.png
2) shuf、70% を計算し、mv コマンドを生成します。
kent$ shuf suf1.txt|awk '{a[NR]=$0}END{l=NR*0.7;s="mv \"%s\" /path/dest\n"; for(x=1;x<=l;x++){printf s,a[x];sub("suf1","suf2",a[x]);printf s, a[x]}}'
mv "apple_008_suf1.png" /path/dest
mv "apple_008_suf2.png" /path/dest
mv "apple_011_suf1.png" /path/dest
mv "apple_011_suf2.png" /path/dest
mv "apple_009_suf1.png" /path/dest
mv "apple_009_suf2.png" /path/dest
mv "apple_015_suf1.png" /path/dest
mv "apple_015_suf2.png" /path/dest
mv "apple_003_suf1.png" /path/dest
mv "apple_003_suf2.png" /path/dest
mv "apple_013_suf1.png" /path/dest
mv "apple_013_suf2.png" /path/dest
mv "apple_017_suf1.png" /path/dest
mv "apple_017_suf2.png" /path/dest
mv "apple_019_suf1.png" /path/dest
mv "apple_019_suf2.png" /path/dest
mv "apple_006_suf1.png" /path/dest
mv "apple_006_suf2.png" /path/dest
mv "apple_016_suf1.png" /path/dest
mv "apple_016_suf2.png" /path/dest
mv "apple_010_suf1.png" /path/dest
mv "apple_010_suf2.png" /path/dest
mv "apple_004_suf1.png" /path/dest
mv "apple_004_suf2.png" /path/dest
mv "apple_018_suf1.png" /path/dest
mv "apple_018_suf2.png" /path/dest
mv "apple_005_suf1.png" /path/dest
mv "apple_005_suf2.png" /path/dest
ご覧のとおり、20 の 70% は 14 であるため、28 の mv コマンドが生成されます。そして、必要に応じてランダムに。
それらを印刷する必要はありません。ここでコマンドを示したいだけです。あなたはただ行うことができます:
shuf suf1.txt|awk '..my awk codes here..'|sh
操作を行いmv
ます。もちろん、これ/path/dest
は単なる例です。
幸運を。