Mover o comando para transferir todos os arquivos em uma subpasta para o diretório pai e renomear se houver arquivos com o mesmo nome

3

Então eu tenho um diretório que tem 77 subpastas na minha máquina Ubuntu, cada uma com várias quantidades de arquivos torrent nelas. Total de 427 torrents estão contidos nas subpastas. Eu quero mover todos eles das subpastas para o diretório pai.

A pegadinha? Alguns dos arquivos são nomeados exatamente o mesmo. Quando movidos, não importa o que eles são renomeados, mas a maneira mais fácil de consertá-lo seria abc.torrent --- > abc1.torrent, abc2.torrent e assim por diante, se houver mais.

Eu encontrei o seguinte código para extrair todos os arquivos para o diretório pai:

find . -mindepth 2 -type f -print -exec mv {} . \;

e eu entendo que eu posso usar --backup para corrigir os arquivos que têm o mesmo nome. Então, adicionei isso ao código:

find . -mindepth 2 -type f -print -exec mv --backup=numbered {} . \;

Mas quando eu o executo, acabo recebendo apenas 167 arquivos movidos em vez dos 427.

Eu também sei que posso usar -i para me perguntar individualmente sobre cada um, mas isso levaria bastante tempo. Existe alguma maneira de automatizar isso?

    
por xCloudx 29.01.2018 / 11:33

1 resposta

-1

Seu segundo achado deve funcionar tanto quanto eu entendo - se você canalizar isso em wc -l , ele retorna 427 como esperado?

Aqui está um rápido script que deve fazer o mesmo:

#!/bin/bash

for torrent in $(find /path/to/target/dir -mindepth 2 -type f); do
    count=0
    # get filename and remove any spaces
    filename=$(echo $torrent | tr -d ' ' | awk -F '/' '{print $NF}')
    # if it exists in the current dir, name it $count-$filename
    while [ -f /path/to/target/dir/$filename ]; do
        ((count++))
        filename=$count-$filename
    done
    # do the move
    mv "$torrent" /path/to/target/dir/$filename
done
    
por 29.01.2018 / 11:54