Como mover os arquivos para o novo diretório baseado em nomes no arquivo de texto?

1

Eu tenho tar.gz arquivos como abaixo em um diretório df :

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

Eu também tenho o arquivo de texto move.txt com as seguintes informações de colunas:

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

Eu quero mover os arquivos no diretório df para outro diretório com base na correspondência deles em move.txt file

Eu tentei desse jeito, mas não funcionou:

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

A saída deve estar no diretório ~/destination :

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

Parece que estou perdendo a coluna no arquivo de texto. Alguma ajuda?

    
por beginner 27.04.2018 / 13:36

2 respostas

2
Solução

bash + awk :

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

Ou com xargs :

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

A operação awk crucial implica:

  • NR > 1 - inicia o processamento a partir da segunda linha (pule o primeiro como cabeçalho )
  • print $7 - imprime o sétimo valor do campo $7 ( tar column)
por 27.04.2018 / 13:58
2

Respondendo minha própria pergunta

Dentro do diretório "df" eu dei o seguinte comando. E funcionou.

cat move.txt | xargs mv -t destination/
    
por 27.04.2018 / 14:05