Copie os últimos arquivos usados do tamanho total

0

Eu quero copiar os últimos arquivos usados (ou talvez criados) de um tamanho total para outra pasta. Isso é possível sem ferramentas adicionais?

Eu tenho um drive USB de um determinado tamanho que é menor que o tamanho total de uma pasta. Como não consigo copiar todos os arquivos para USB, gosto de copiar com base no uso mais recente até que não haja mais espaço. Idealmente, o método também suporta a atualização dos arquivos sem a necessidade de apagar todos os arquivos e copiá-los novamente.

    
por PhilippS 15.02.2016 / 19:44

2 respostas

1

Supondo (com base na tag [linux]) que você tem bash disponível, bem como os comandos stat e sort ; supondo que você deseja sincronizar os arquivos mais recentemente modificados primeiro (consulte man stat para outro timestamp) opções), então aqui está um script bash que irá percorrer todos os arquivos no diretório atual ( for f in * é a linha chave para isso), reunindo seus timestamps de última modificação em uma matriz, então ele percorre os timestamps classificados e imprime - uma amostra! - Comando rsync para cada arquivo (atualmente possui informações de depuração de timestamp anexadas como prova).

Você terá que ajustar o comando rsync para sua situação específica, é claro. Este script irá gerar comandos rsync para cada arquivo no diretório atual; minha sugestão seria executar estes rsync "cegamente", deixando os que estão no final falharem, ou colocá-los em um script para executar separadamente.

Este script não tenta otimizar a utilização do espaço do destino de forma alguma - a única ordem que ele faz é o registro de data e hora da última modificação (e a ordenação arbitrária do array associativo no caso de haver vários arquivos modificados no diretório). mesmo segundo).

#!/usr/bin/env bash
declare -A times

# gather the files and their last-modified timestamp into an associative array,
# indexed by filename (unique)
for f in *
do
  [ -f "$f" ] && times[$f]=$(stat -c %Y "$f")
done

# get the times in (unique) sorted order
for times in ${times[@]}
do
  echo $times
done | sort -run | while read t
do
  # then loop through the array looking for files with that modification time
  for f in "${!times[@]}"
  do
    if [[ ${times[$f]} = $t ]]
    then
      echo rsync "$f" -- timestamp ${times[$f]}
    fi
  done
done
    
por 15.02.2016 / 21:30
1

Você deve classificar seus arquivos por data de modificação e, em seguida, passar os nomes nessa ordem para rsync para copiar. Você também pode usar cp , mas rsync é mais eficiente.

Já existe um tópico sobre como fazer isso em superuser.com: link

    
por 15.02.2016 / 21:06