linux创建目录并将相应的文件移动到目录中

时间:2017-10-26 07:35:33

标签: linux for-loop text mv

我有一个文本文件列出了目录名称以及应该包含哪些文件。

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文件,我想根据文本文件将它们移动到相应的目录。我不知道如何做这个部分。

2 个答案:

答案 0 :(得分:1)

您必须为systemmkdir个文件的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

不要复杂,但如果您对此有疑问,可以向我提出任何问题