我有一个文本文件列出了目录名称以及应该包含哪些文件。
my text file:
SRS000111 ERR1045156
SRS000112 ERR1045188
SRS000123 ERR1045204
SRS000134 ERR1045237 ERR1045238 ERR1045239
SRS000154 ERR1045255 ERR1045256
SRS000168 ERR1045260 ERR1045261 ERR1045262
... ... ...
SRS001567 ERR1547451 ERR1547676
现在我想使用文本文件的第一列创建所有目录,但我不知道如何进行for循环。
for filename in cat file.txt | awk -F, '{print $1}'; do mkdir ${filename}; done
但它会出错。
第二我有所有的ERR文件,我想根据文本文件将它们移动到相应的目录。我不知道如何做这个部分。
答案 0 :(得分:1)
您必须为system
和mkdir
个文件的awk发出mv
次来电
awk 会做
awk 'FNR>1{system("mkdir \"" $1 "\""); for(i=2; i<=NF; i++) system("mv \"" $i "\" " "\"" $1 "\"")}' file
FNR>1
,因为我们不想为您的CSV文件中的第一行创建目录,即标题名称
注意:从源/输入文件中提到的所有文件名都存在的目录中运行此命令。这将在那里创建目录,并将移动那些新创建的目录中的所有文件。
答案 1 :(得分:1)
我建议你阅读文件,拆分文件夹名称列和文件名列,并制作de目录和动作。
这个脚本使它:
#!/bin/bash
while IFS='' read -r line || [[ -n "$line" ]]; do
dir=$(echo "$line" | awk '{print $1}')
files=$(echo "$line" | awk '{$1=""; print $0}')
mkdir $dir
mv $files $dir/
done < myfile.txt
不要复杂,但如果您对此有疑问,可以向我提出任何问题