Linux

如何根據文本文件中的名稱將文件移動到新目錄?

  • April 27, 2018

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

看起來我缺少文本文件中的列。有什麼幫助嗎?

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- 從第 2 行開始處理(跳過第 1 行作為標題
  • print $7- 列印第 7 個欄位值$7tar列)

回答我自己的問題

在目錄“df”中,我給出了以下命令。它奏效了。

cat move.txt | xargs mv -t destination/

引用自:https://unix.stackexchange.com/questions/440398