1つのディレクトリからn個のランダムファイルを選択して、別のフォルダ+同じですが、異なるファイル形式を持つ別のファイルにコピーします。

1つのディレクトリからn個のランダムファイルを選択して、別のフォルダ+同じですが、異なるファイル形式を持つ別のファイルにコピーします。

ディレクトリが2つあります。ディレクトリを呼び出してみましょう。Xそしてはい その中には100,000以上のファイル、.jpgファイルがあります。Xおよび .txt ファイルはい

ランダムに選択したい窒素ファイルソース:Xそしてフォルダにコピー

これはfind + shuffleを使用して管理できる必要があります。

それからその中のすべてのファイルを探したいと思います。はいコピーしたファイルと同じ名前ただし、そのファイルは.txtファイルなので、そのディレクトリにコピーしてください。ワット

可視化:N個のファイルX>> 同じN個のファイルはい>>ワット

どうすればいいですか?

答え1

#!/bin/bash

X=/path/to/X
Y=/path/to/Y
Z=/path/to/Z

mapfile -d '' -t files < <(find "$X" -type f -name '*.jpg' -print0 |
                           shuf -z -n 10 -)

for f in "${files[@]}"; do
  echo cp "$f" "$Z"
  bn=$(basename "$f" ".jpg")
  echo cp "$Y/$bn.txt" "$Z"
done

このスクリプトはテストされていませんが、必要な操作を実行する必要があります。Xそして、変数を正しい値に設定してから、実行して何をするかを確認し、必要に応じて調整し、必要に応じて機能する場合はY2行を削除します。Zechocp

$filesまず、ディレクトリ内の10個のランダムな.jpgファイル名で配列()を埋めるように動作します$X。ファイル名の区切り文字として NUL を使用するので、すべてのファイル名、さらにはスペース、タブ、シェルメタ文字などの迷惑な文字にも機能します。

次に、各ファイル名を繰り返して1.そのファイルをディレクトリにコピーし、2.ファイル名$Zのデフォルト名部分を抽出し、3.デフォルト名+をディレクトリ.txtから$Yディレクトリにコピーします$Z

ところで、この-dオプションがmapfile

関連情報