move arquivos de uma lista de arquivos

0

Então, eu tenho uma lista de arquivos em um arquivo de texto. Eu acredito que são cerca de 100.000 arquivos.

Os arquivos da lista estão espalhados por vários diretórios, têm diferentes tamanhos, nomes de arquivos, extensões, idades, etc.

Estou tentando encontrar uma maneira de mover esses arquivos e apenas esses para outra unidade.

Complicating factor: alguns dos arquivos têm o mesmo nome, mas não são o mesmo arquivo. Eles não podem simplesmente ser movidos para uma pasta com uma política de sobrescrita ou ignorando para múltiplos.

De preferência, gostaria que eles retivessem sua estrutura de diretórios, mas apenas os arquivos que eu quero dentro do diretório de destino. (a unidade de destino não é grande o suficiente para simplesmente copiar tudo).

Abaixo está um exemplo de algumas linhas no arquivo:

    media/dave/xdd/cruzer/F#(NTFS 1)/Raw Files/Portable Network Graphic file/3601-3900/FILE3776.PNG/Windows/winsxs/amd64_microsoft-windows-o..disc-style-memories_31bf3856ad364e35_6.1.7600.16385_none_51190840a935f980/Title_mainImage-mask.png

media / dave / xdd / d1 / outro / hd1 / Arquivos de programas / Criador de DVD / Compartilhado / DvdStyles / Memories / Title_content-background.png

Eu tentei usar

    rsync -a --files-from=/sourcefile.txt / /media/destinationhdd

No entanto, isso apenas tenta copiar meu diretório raiz para o destino. Por favor, ajudem, como posso copiar os arquivos malditos que eu quero?

    
por Ne Mo 11.08.2014 / 17:59

1 resposta

1

Estou assumindo um ambiente semelhante ao Unix, então escreverei isso no script bash, mas o conceito é mais ou menos o mesmo em linguagens de script semelhantes ...

Execute este script no diretório em que os arquivos na lista de arquivos estão relacionados ...

#!/bin/sh

# (naive) File migration script

IFS=$'\n'
destination_path = "/path/to/destination/here/"

for file in 'cat filelist.txt'
do
    cp -v --parents $file $destination_path
done

O que isso faz é que você está preservando a estrutura do diretório pai de origem ao copiar para o destino especificado. O rsync é ótimo para fazer backup de arquivos inteiros que você atualiza regularmente, pois é para isso que o algoritmo é ajustado. Mas, para operações mais simples, os comandos básicos do Unix agrupados em um script simples são mais que adequados. Observe que isso também define a variável IFS bash que normalmente é composta de <space><tab><newline> , embora a configuração provavelmente não seja preservada na saída do script.

    
por 11.08.2014 / 21:56

Tags