如何将文本文件中列出的文件移动到相关目录?
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
我有一个包含如下文件列表的文本文件:
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