ディレクトリが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
そして、変数を正しい値に設定してから、実行して何をするかを確認し、必要に応じて調整し、必要に応じて機能する場合はY
2行を削除します。Z
echo
cp
$files
まず、ディレクトリ内の10個のランダムな.jpgファイル名で配列()を埋めるように動作します$X
。ファイル名の区切り文字として NUL を使用するので、すべてのファイル名、さらにはスペース、タブ、シェルメタ文字などの迷惑な文字にも機能します。
次に、各ファイル名を繰り返して1.そのファイルをディレクトリにコピーし、2.ファイル名$Z
のデフォルト名部分を抽出し、3.デフォルト名+をディレクトリ.txt
から$Y
ディレクトリにコピーします$Z
。
ところで、この-d
オプションがmapfile
。