Encontre a partir de uma lista de arquivos e mova-se no Unix

0

Eu tenho um arquivo de lista com nomes de arquivos, eu quero ler um nome de arquivo da lista de cada vez e procurá-lo em uma estrutura de diretórios com várias subpastas e depois encontrado movê-lo para uma pasta diff. p>

Ex:

listfile.txt

Content of the file--
filename1.txt
filename2.txt

maindir
|--subdir1
|---subdir2/filename1.txt
|---subdir3/filename2.txt

leia os nomes dos arquivos de listfile.txt, um a um, e mova-os para uma pasta diff, digamos / destfolder.

Qualquer sugestão seria ótima.

Obrigado Kavin

    
por Kavin Palaniswamy 29.06.2018 / 17:56

1 resposta

2

Usando um loop de shell e chamando find uma vez para cada nome de arquivo:

mkdir -p archive_dir
while IFS= read -r filename; do
    find maindir -type f -name "$filename" -exec mv {} archive_dir ';'
done <listfile.txt

Isso seria um pouco ineficiente, já que continuaria procurando por nomes de arquivos correspondentes, mesmo depois de encontrar o arquivo (e se encontrasse outro, ele sobrescreveria o que já foi movido).

Se estiver usando o GNU find , você pode adicionar -quit ao final do comando find para fazer com que o processo find pare depois que o primeiro arquivo for movido.

Como funciona:

$ cat listfile.txt
filename1.txt
filename2.txt
.
|-- listfile.txt
'-- maindir
    |-- subdir1
    |-- subdir2
    |   '-- filename1.txt
    '-- subdir3
        '-- filename2.txt

4 directories, 3 files

(executando o loop acima)

Então:

.
|-- archive_dir
|   |-- filename1.txt
|   '-- filename2.txt
|-- listfile.txt
'-- maindir
    |-- subdir1
    |-- subdir2
    '-- subdir3

5 directories, 3 files

Relacionados:

por 29.06.2018 / 18:01

Tags