多くの.txtファイルを含む大きなフォルダが1つあります。
rules.csv
この.txtファイルをファイル内の特定の規則(該当するサブフォルダー)に基づいて別々のサブフォルダーにグループ化しようとしています。
大容量フォルダ:
file1.txt
file2.txt
...
file100.txt
ルールは次のとおりです。
ファイル1.txt
ファイル3.txt
ファイル8.txt
「サブフォルダ1」に属する
ファイル2.txt
ファイル4.txt
ファイル23.txt
「サブフォルダ2」に属する
など
以下はCSV形式(rules.csv)のルールのリストです。
最初の列はファイル名、2番目の列はファイルを移動したいサブフォルダです。
file1.txt subfolder1
file3.txt subfolder1
file8.txt subfolder1
file2.txt subfolder2
file4.txt subfolder2
file23.txt subfolder2
file5.txt subfolder3
file6.txt subfolder3
file9.txt subfolder3
file11.txt subfolder3
file16.txt subfolder3
file12.txt subfolder4
file13.txt subfolder4
file14.txt subfolder4
file19.txt subfolder4
file24.txt subfolder4
file28.txt subfolder4
file30.txt subfolder4
file78.txt subfolder5
file37.txt subfolder5
file49.txt subfolder5
file88.txt subfolder5
これが私が達成したいものです。
「mv」などの端末コマンドに基づいて、これらの.txtファイルをそのサブフォルダに移動し、上記のCSVファイルからこれらの規則を読み取る方法はありますか? (可能かどうかわからない)
私はこれを試しました
mv file1.txt,file3.txt,file8.txt* /subfolder1
しかし、ルールなしですべての人のために手動で行うことは非生産的なようです:(
答え1
質問が示すように、ファイル名にスペースはありませんがスペースはないと仮定すると、単純なシェルループを使用してファイルを2番目の列の対応するディレクトリに移動できます。
while IFS=' ' read -r fileName dirName; do
mkdir -p "./$dirName" && mv "./$fileName" "./$dirName";
done <rules.txt
もしあなたのrules.csv
実際には、.csvファイル(カンマ区切りファイル)の場合はIFS=,
上記の内容を変更できます(ファイル名またはディレクトリ名にはカンマ文字を含めないでください)。