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 个字段值$7
(tar
列)
答案2
回答我自己的问题
在目录“df”内我给出了以下命令。它起作用了。
cat move.txt | xargs mv -t destination/