CSVファイルで定義されているグループ化に従って、ファイルを別のディレクトリに移動します。

CSVファイルで定義されているグループ化に従って、ファイルを別のディレクトリに移動します。

関連:csvリストに基づいて、一致するプレフィックスを持つすべてのファイルをフォルダに移動します。

ヘッダーを含む2つの列CSVファイル(カンマ区切り値)があります。

"id","group"
"F1256","old"
"E51651","new"
"X56369","new"
"G5481369","old"
"54564564T","old"
"544-5F5","new"
"1298FFF","old"
"JKL-wew_w","new"

これらのファイルをディレクトリに入れました。

2014-12-15_T921_F1256.png
E51651_hf_2018-9-19.jpg
hf_oldX56369_15-10-2014.xml
2018-07_xx54564564T_hfdata.bmp
G5481369oldbackup_2018-01-01.txt

grepこのファイルに(または他の同様のツール)を使用し、そのファイル名を私のidCSVファイルの列と一致させたいと思います。一致するものがある場合(つまり、idファイル名で正確に見つかった場合)、そのファイルを適切なgroupサブディレクトリに移動する必要があります。

したがって、現在のディレクトリに2つのフォルダを作成する必要がありoldnewこれらのファイルはすべて説明されている条件に従って移動する必要があります。

結果

old
├──2014-12-15_T921_F1256.png
├──2018-07_xx54564564T_hfdata.bmp
├──G5481369oldbackup_2018-01-01.txt

new
├──E51651_hf_2018-9-19.jpg
├──hf_oldX56369_15-10-2014.xml

どうすればいいですか?

ベストアンサー1

解決策は次awkのとおりです。

awk -F, 'NR>1 { group[$2]= group[$2]? group[$2] "* *" $1: $1 ;next }
    END { 
        for (x in group) printf( "echo mv *%s* -t %s\n" , group[x], x )
    }' infile.csv| sh

echo結果が満足であれば削除してください。

.
├── infile.csv
├── new
│   ├── E51651_hf_2018-9-19.jpg
│   └── hf_oldX56369_15-10-2014.xml
└── old
    ├── 2014-12-15_T921_F1256.png
    ├── 2018-07_xx54564564T_hfdata.bmp
    └── G5481369oldbackup_2018-01-01.txt

これにより、そのディレクトリグループに属するすべてのファイルがすぐに移動されます。説明
については、awk以下を参照してください。私の最近の答え

おすすめ記事