部分的に一致するファイルをオプションで別のディレクトリに移動する

部分的に一致するファイルをオプションで別のディレクトリに移動する

私は、親ディレクトリに部分的に番号が付けられた100個のファイルを持つLinuxサーバーで作業しています。

GGG12345_abb.txt 
GGG12346_abc.txt 
GGG12347_cbx.txt 
.
.
GGG19045_jha.txt 

各カテゴリはカテゴリに対応します。たとえば、次のようになります。

myname1 
myname2
.
.
myname12

また、nameとid、部分、およびmyname*インデックスGGG(none _xxx.txt)という2つの列を持つインデックステキストファイルもあります。

12_12_myname1_abc GGG12345
12_15_myname1_abc GGG12346
.
.
11_15_myname2_abc GGG12353

サブディレクトリなどを作成しましたMYNAME1MYNAME2インデックスファイルからファイルインデックスを選択し、そのテキストファイルを関連するサブディレクトリに移動するにはどうすればよいですか?たとえば、GGG12345_abb.txtカテゴリをmyname1ディレクトリにMYNAME1

答え1

以下のスクリプトがお客様の要件を満たしていることを確認してください。

while IFS="[ _]" read a b dir c file ; do echo mv -t ${dir^^} ${file}* ; done < index.file

その後、削除してくださいecho

答え2

メタデータファイルにこの内容がある場合:

12_12_私の名前1_アルファベットGGG12345

GGG12345_ ファイルをコピーする必要があることを意味します。アルファベット.txtがディレクトリにある私の名前1awkを使用してメタデータファイルを解析し、ファイルをコピーできます。

awk '{ x = split($1, arr, "_"); arr[3] = toupper(arr[3]); s = "mv " $2 "_" arr[4] ".txt " arr[3]; } { system(s); }' metadata

systemコマンドが実行する操作を確認するために、最初に使用しなくてもテストできます。

awk '{ x = split($1, arr, "_"); arr[3] = toupper(arr[3]); s = "mv " $2 "_" arr[4] ".txt " arr[3]; } { print s; }' metadata

abcが含まれている場合:

12_12_私の名前1_アルファベットGGG12345

これは重要ではありません。たとえば、GGG12345とMYNAME1のみが必要です。

awk '{ x = split($1, arr, "_"); arr[3] = toupper(arr[3]); s = "mv " $2 "* " arr[3]; } { system(s); }' metadata

今回も以下を使用せずにテストできますsystem

awk '{ x = split($1, arr, "_"); arr[3] = toupper(arr[3]); s = "mv " $2 "* " arr[3]; } { print s; } ' metadata

関連情報