私は、親ディレクトリに部分的に番号が付けられた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
サブディレクトリなどを作成しましたMYNAME1
。MYNAME2
インデックスファイルからファイルインデックスを選択し、そのテキストファイルを関連するサブディレクトリに移動するにはどうすればよいですか?たとえば、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