Como transferir a seleção aleatória de diretórios do hd externo para o laptop e especificar o limite do total de dados

1

Meu laptop HD é um SSD de 120GB. Eu também tenho um TB externo HD que eu usei para armazenar minhas músicas, fotos e vídeos. Eu gosto de ouvir música no laptop caso eu queira ouvir algo e não tenho acesso à Internet (normalmente não carrego meu HD externo). Mas se eu tivesse toda a minha coleção de músicas no meu laptop, ocuparia uma grande parte do meu espaço livre. Eu queria uma ferramenta que tivesse uma seleção aleatória de álbuns do meu HD externo e os transferisse para minha coleção de músicas no meu laptop. Para a transferência, gostaria de especificar apenas a quantidade máxima de dados que desejo transferir. Por exemplo, gostaria de poder especificar, obter 10 GB de álbuns aleatórios da coleção de músicas no meu HD externo e colocá-los no diretório de músicas do meu laptop, eliminando o que já estava disponível no diretório de músicas do meu laptop. Existe uma ferramenta que pode me ajudar a conseguir isso? Isso também seria útil para transferir músicas para o meu smartphone. P.S. Eu sou um usuário do Ubuntu.

    
por tatsuhirosatou 13.07.2013 / 19:54

2 respostas

1

Contanto que você não precise de exatamente 10 GB de dados, apenas cerca de 10 GB, mas não mais, você pode escrever uma função bash que faz isso. Adicione estas linhas ao seu arquivo $HOME/.bashrc :

function random_copy(){
    size=0; 
    tries=0;
    dirs=(); 
  ## The maximum size, change this to whatever you want
    limit=10000000
  ## The maximum number of times we will try to get 
  ## another dir if the current one is too big.
    maxtries=20
  ## While we have not reached the size limit
    while [[ $size -lt $limit ]] ; do 
  ## Find a random, non-empty directory from the source. 
  ## sort -R does a  random sort and head -n 1 prints the first line.
    dir="$(find $1/*/  -not -empty -type d | sort -R | head -n 1)"
  ## Get this dir's size
    dsize=$(du -s "$dir" | cut -f 1)
  ## If this dir does not make us pass the limit
    if [[  $((size + $dsize)) -le $limit ]]; then
        echo "Copying $dir" 1>&2
    ## Copy it to target
        cp -r "$dir" $2
    ## Add its size to $size
        let size+=$dsize
  ## If this dir makes us pass the limit
  ## try $maxtries times to find another that does not
    else
        let tries++;
        if [[ $tries -gt $maxtries ]]; then
        echo "" 1>&2;
        echo "Final size =  $size"
        break;
        fi
    fi
    done; 
}

Você pode então chamar a função executando

random_copy /path/to/source /path/to/destination

Por exemplo

random_copy ~/Music /tmp/music

NOTAS

  • A função procurará pastas que estejam sob o diretório de origem. Estou assumindo que cada um dos seus álbuns está em sua própria pasta.
  • O tamanho real que você terá será diferente toda vez que executar a função. Se um determinado diretório fizer passar o limite de tamanho, ele tentará novamente até que $maxtries seja atingido. Você pode controlar isso alterando maxtries=20 para o que você quiser.
por 13.07.2013 / 21:30
1

Use a ferramenta Cópia aleatória .

A cópia aleatória tem três modos:

  • A file-based mode : o modo normal para criar uma coleção de músicas em diferentes pastas de origem.

  • A directory-based Mode : para criar uma coleção de músicas, também com base em diferentes diretórios de origem, mas em diferente do modo baseado em arquivo, o conteúdo completo de um diretório é copiado.

  • A CD-based Mode : Um modo especial para ajustar o tamanho de um CD ou DVD com músicas, para que haja menos espaço. Os arquivos de destino podem ser os arquivos de origem ou os arquivos wave após a conversão interna.

Linuxalternativo

UmaopçãoseriaparaoLinux Mix2Stix .

Etapas para instalação e como usar, estão descritas na página .

Nota:Mix2StixrequeroJavaquedeveserinstaladonosistema.Afonteestáincluídanadistribuição.

Usandoocomandofind/cp

find-L~-typef-name"*.mp3" | sort -R | tail -n50 | while read file; do cp "$file" /media/<yourdisk>; done

O comando find procurará por arquivos mp3 na sua pasta de usuário ~ . -n50 representa quantos arquivos serão copiados.

    
por 13.07.2013 / 20:07