根据文件中的特定规则移动子文件夹中的文件

根据文件中的特定规则移动子文件夹中的文件

我有 1 个大文件夹,其中有很多 .txt 文件

我试图根据rules.csv文件中的特定规则(它们所属的子文件夹)将这些 .txt 文件分组到单独的子文件夹中:

大文件夹:
file1.txt
file2.txt
...
file100.txt

规则是:

文件1.txt
文件3.txt
文件8.txt

属于“子文件夹1”

文件2.txt
文件4.txt
文件23.txt

属于“子文件夹2”

ETC

以下是 CSV 格式的规则列表 (rules.csv):

第一列是文件名,第二列是我想将它们移动到的子文件夹。

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

假设您的文件名称中没有空格,如您的问题所示,但它们没有,那么您可以使用一个简单的 shell 循环将文件移动到第二列中相应的目录中。

while IFS=' ' read -r fileName dirName; do
    mkdir -p "./$dirName" && mv "./$fileName" "./$dirName";
done <rules.txt

如果你的rules.csv实际上是一个 .csv 文件(逗号分隔文件),那么您可以更改IFS=,上面的内容(仍然记住您的文件名或目录名不应包含逗号字符)。

相关内容