Ferramenta ou comando para mover vários arquivos de várias pastas em um único lugar (sem sobrescrever)

2

Atualmente, estou trabalhando na recuperação de alguns arquivos de log de backups aleatórios que fiz. Eu tenho 48 arquivos em mais de 70 pastas.

Como posso mover esses 48 arquivos para uma pasta, sem sobrescrever arquivos com o mesmo nome? A maioria desses arquivos tem o mesmo nome, mas tamanho diferente, eu verifiquei com fdupes .

    
por ubunchu 20.10.2012 / 12:50

2 respostas

0

Digite este comando no seu terminal ( Ctrl + Alt + T para abri-lo):

find $LOG_DIR -type f | xargs -I {} sh -c 'base=$(basename ""); name=${base%.*}; ext=${base##*.}; mv "" "$OUTPUT_DIR/$name'date +%N'.$ext"' -- {}

Basicamente, isto irá encontrar todos os seus arquivos em $ LOG_DIR (que você tem que substituir com o emplacement do pai de suas 70 pastas), extrair o nome sem caminho ( basename ), separar o arquivo nome e a extensão e, em seguida, mova-os para $ OUTPUT_PATH (substitua por onde você quer que eles apareçam) e acrescente o número de nanossegundos neste momento ( dados +% N ) ao nome, para não sobrescrever .

PS: Eu tenho uma pequena ajuda de lá: StackOverflow

    
por NorTicUs 23.10.2012 / 14:20
0

Primeiro, use find conforme indicado acima para localizar os arquivos que você deseja mover:

find /dir/with/scattered/logs -type f

Isso apenas imprimirá a lista de arquivos. Se você está feliz com isso, basta usar cp com a opção de backup, isso "fará um backup de cada arquivo de destino existente". Desde que você disse que os nomes não importam tanto que deveria ser OK. Os arquivos de backup terão um "~" anexado ao nome. Veja man cp para melhor controle sobre essa funcionalidade.

find /dir/with/scattered/logs -type f -exec cp -b {} /destination/directory \;

Isso copiará os arquivos um a um, o que é menos eficiente do que usar xargs , mas a quantidade de arquivos que você mencionou não deve ser um problema.

    
por roadmr 17.02.2014 / 23:13