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

How to move files listed in a text file to related directories?

我有一个包含如下文件列表的文本文件:

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

A,B,C,D, ... 是位于第一列的样本名称,我想用样本名称创建子目录并移动每个样本的相关文件(位于第二和第三列)到自己的目录。我怎样才能循环执行此操作?

当你的 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

这将适用于固定数量的列。当你想在每一行支持未知数量的文件时,你必须稍微改变一下:

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