如何根据文本文件中的名称将文件移动到新目录?

如何根据文本文件中的名称将文件移动到新目录?

tar.gz我的目录中有如下文件df

A.tar.gz
B.tar.gz
C.tar.gz
D.tar.gz
E.tar.gz
F.tar.gz
G.tar.gz

move.txt我还有包含以下列信息的文本文件:

ID  Status      Status2     Status3     Status4     Status5         tar   sample
ID1 Negative    Negative    Negative    Negative    Negative    D.tar.gz    Sam1
ID2 Negative    Negative    Negative    Negative    Negative    A.tar.gz    Sam2
ID3 Negative    Negative    Negative    Negative    Negative    C.tar.gz    Sam3
ID4 Negative    Negative    Negative    Negative    Negative    F.tar.gz    Sam4

我想df根据move.txt文件中的匹配将目录中的文件移动到另一个目录

我尝试了这种方法但没有成功:

for file in $(cat move.txt)
do 
    mv "$file" ~/destination 
done

输出应位于~/destination目录中:

D.tar.gz
A.tar.gz
C.tar.gz
F.tar.gz

看起来我缺少文本文件中的列。有什么帮助吗?

答案1

bash+awk解决方案:

for f in $(awk 'NR > 1{ print $7 }' move.txt); do 
    [[ -f "$f" ]] && mv "$f" ~/destination
done

或者与xargs

awk 'NR > 1{ print $7 }' move.txt | xargs -I {} echo mv {} ~/destination

关键awk操作意味着:

  • NR > 1- 从第二行开始处理(跳过第一行,因为标头
  • print $7- 打印第 7 个字段值$7tar列)

答案2

回答我自己的问题

在目录“df”内我给出了以下命令。它起作用了。

cat move.txt | xargs mv -t destination/

相关内容