如何根据 csv 文件中的匹配将文件夹移动到新目录?

如何根据 csv 文件中的匹配将文件夹移动到新目录?

在我当前的目录中,我有许多文件夹,如 F1、F2、F3、F4、F5、F6、F7、F8、F9、F10。

我在当前目录中有一个 csv 文件“dan.csv”,其中有一列带有文件夹名称。

csv 文件如下所示:列名称为“id”

id
F1
F4
F5
F6
F8
F10

根据它们在 csv 文件中的匹配情况,我想将文件夹移动到新目录“DAN”。

为此我尝试了如下操作:

xargs -a <(tail -n +2 dan.csv) -I{} sh -c '[ -d "{}" ] && mv -t DAN "{}"'

这并没有引发任何错误,也没有将文件夹移动到新目录“DAN”。

答案1

一个简单的 bashwhile循环就足够了:

IFS=";"
while read othercolumn1 othercolumn2 ... id ... othercolumnx
do
    mv $id DAN/
done < dan.csv

它从 CSV 文件中读取每一行,根据变量中的字符集拆分行IFS,并将该行的每个值存储在 while 循环标题中指定的相应变量中。

确保将 while 循环的标题(其中列出了所有列)与 CSV 文件的标题相匹配。您可能不需要其他列的值,但无论如何,读取它们很重要,否则 CSV 中的每个值都将被视为一个值id。如果您的 CSV 文件由 以外的其他字符分隔,请确保在循环之前;将特定字符设置为-value 。IFS=while

如果dan.csv有四列,其中 id 是第三列,则可以这样做:

IFS=";"
while read othercolumn1 othercolumn2 id othercolumn4
do
    mv $id DAN/
done < dan.csv

相关内容