私はまだbashスクリプトの初心者です。複数のディレクトリを実行するためにコピーコマンドを繰り返したいと思います。 P1、P2、P3、..P60 ディレクトリセットがあります。各ディレクトリには「A」、「M」、「out」の3つのフォルダがあります。 AとMフォルダからファイルをコピーして「out」フォルダに貼り付けたいです。次に、60のすべてのディレクトリに対してこの操作を繰り返します。
「AL」にはPIL_CBR.niiというファイルがあり、「M」にはPIL_MO.niiというファイルがあります。
ありがとうございます!
答え1
P1、P2、...、P60 ディレクトリが同じフォルダにあるとします。それからあなたはただフォルダ内のすべてのディレクトリを繰り返します。そして実行してくださいcp
。このフォルダから次のスクリプトを実行します。
for d in P*/ ; do
echo "$d"
cp $d/A/* $d/M/* $d/out/
done
ここでは、*が現在のディレクトリのファイル名とディレクトリ名に展開されていることがわかります。
答え2
ディレクトリ名がそのように正確に指定され、現在のディレクトリにあり、ディレクトリごとに何千ものファイルが含まれていないと仮定すると、次のように動作します。
for dir in P{1..60}/{A,M} ; do
[ -d "$P" ] || continue
cp "$dir"/* "${dir%[AM]}out/"
done
ワイルドカードを使用して*
ディレクトリを選択することはできますが、予期しない内容を一致させ変更する危険があります。
これは、説明する項目の正確なセットとのみ一致する必要がありますが、説明する状況には非常に具体的であるため、他の入力に合わせて方法を変更する必要があるかもしれません。
両方のディレクトリのファイル名が競合している場合は、fromの内容がM
置き換えられますA
。これは処理できますが、元の仕様にはありません。