在我当前的目录中,我有许多文件夹,如 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