Movendo apenas os arquivos que aparecem na lista

3

Eu tenho uma lista de alguns nomes / IDs e no mesmo diretório eu tenho arquivos originais da lista. Eu estou tentando encontrar como posso mover arquivos originais para outra pasta, mas apenas aqueles que aparecem na lista?

Então meu arquivo de lista / txt se parece com isto:

2mtz.pdb
2lbq.pdb
2kad.pdb

e meus arquivos originais têm exatamente o mesmo ID, mas eu tenho que encontrar uma maneira de mover somente aqueles da lista.

    
por milan 16.01.2018 / 17:46

3 respostas

3

Se a lista estiver no arquivo /tmp/list.txt , você pode fazer da seguinte maneira:

cat /tmp/list.txt | xargs mv -t /app/dest/

ou menor:

xargs mv -t /app/dest/ < /tmp/list.txt

É uma combinação de comandos:

mv -t /app/dest/ 

Para mover todos os argumentos SOURCE para DIRECTORY usando a opção -t ou --target-directory = DIRECTORY

E usando o comando xargs , que executa as linhas de comando da entrada padrão, mas, neste caso, todas as linhas de /tmp/list.txt , porque fizemos um redirecionamento usando o <

crédito para este outro Q & A link

    
por manuti 16.01.2018 / 17:54
2

Aqui estão dois exemplos que usam while loop.

No próximo exemplo, o conteúdo do arquivo chamado list será redirecionado para o while loop, onde cada linha será read como valor da variável $FILE_NAME , que será usada como um argumento no comando mv .

while IFS= read -r FILE_NAME; do mv "$FILE_NAME" "/dest/dir/"; done < /path/to/list

No próximo exemplo, o comando cat exibirá o conteúdo do arquivo chamado list . A saída será canalizada para o loop while , onde cada linha será read como valor da variável $FILE_NAME , que será usada como um argumento no comando mv .

cat /path/to/list | while IFS= read -r FILE_NAME; do mv "$FILE_NAME" "/dest/dir/"; done

O uso de redirecionamento é o melhor caminho. Aqui é fornecida uma explicação mais detalhada sobre este uso de while : Enquanto o loop só processa a primeira entrada do comando ssh .

    
por pa4080 16.01.2018 / 18:03
2

No Unix, se nos esforçarmos, os nomes dos arquivos podem ter todo tipo de caracteres inesperados. Sempre que possível, geralmente evitamos usar espaços, '?', '\ N', '(', '*' etc. em nomes de arquivos e diretórios.

Se seus nomes de arquivos não tiverem "espaços" e outros caracteres estranhos, tente:

mv $(cat list/txt) destination/dir/
    
por JJoao 16.01.2018 / 19:07