テキストファイルの名前に基づいてファイルを新しいディレクトリに移動するには?

テキストファイルの名前に基づいてファイルを新しいディレクトリに移動するには?

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- 2行目から処理を開始します(1行目はスキップするためヘッダー)
  • print $7- 7番目のフィールド値$7tar列)を出力します。

おすすめ記事