如何将文本文件中列出的文件移动到相关目录?

时间:2016-03-06 12:25:23

标签: shell loops unix text move

我有一个文本文件,其中包含如下文件列表:

A file1.gz file2.gz
B file3.gz file4.gz
C file5.gz file6.gz
D file7.gz file8.gz
...

A,B,C,D, ...是位于第一列的样本的名称,我想创建带有样本名称的子目录,并将每个样本的相关文件(位于第二和第三列)移动到其中自己的目录。我怎样才能做这个循环呢?

1 个答案:

答案 0 :(得分:1)

textfile中的字段与空格分隔(并且您的目录和文件名没有空格)时,您可以使用

while read -r dir file1 file2; do
   mkdir -p "${dir}"
   if [ ! -d "${dir}" ]; then
      echo "Something strange with ${dir}, I do not know what to do."
      exit 1
   fi

   if [ -f "${file1}" ]; then
      mv "${file1}" "${dir}"
   fi

   if [ -f "${file2}" ]; then
      mv "${file2}" "${dir}"
   fi
done < textfile

这将适用于固定的nr列。如果要在每一行上支持未知的nr个文件,则必须稍微更改一下:

while read -r dir files; do
   mkdir -p "${dir}"
   if [ ! -d "${dir}" ]; then
      echo "Something strange with ${dir}, I do not know what to do."
      exit 1
   fi

   for file in ${files}; do
      if [ -f "${file}" ]; then
         mv "${file}" "${dir}"
      fi
   done
done < textfile