![根据文件中的特定规则移动子文件夹中的文件](https://linux22.com/image/202437/%E6%A0%B9%E6%8D%AE%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E7%89%B9%E5%AE%9A%E8%A7%84%E5%88%99%E7%A7%BB%E5%8A%A8%E5%AD%90%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%AD%E7%9A%84%E6%96%87%E4%BB%B6.png)
我有 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=,
上面的内容(仍然记住您的文件名或目录名不应包含逗号字符)。