Copie os últimos arquivos usados ​​do tamanho total

Copie os últimos arquivos usados ​​do tamanho total

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

Tenho uma unidade USB de um determinado tamanho 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.

Responder1

Supondo (com base na tag [linux]) que você tenha bashdisponível, bem como os comandos state ; sortsupondo que você deseja sincronizar primeiro os arquivos modificados mais recentemente (consulteestatística do homempara outras opções de carimbo de data e hora), aqui está um script bash que percorrerá todos os arquivos no diretório atual ( for f in *é a linha principal para isso), reunindo os carimbos de data e hora da última modificação em uma matriz, depois percorrerá os carimbos de data e hora classificados e impressões - uma amostra! -- comando rsync para cada arquivo (atualmente possui informações de depuração de carimbo de data/hora anexadas como prova).

Você terá que ajustar o comando rsync para sua situação específica, é claro. Este script gerará comandos rsync para cada arquivo no diretório atual; minha sugestão seria executar esses rsync "às cegas", deixando os do final falharem, ou colocá-los em um script para serem executados 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 carimbo de data e hora da última modificação (e a ordem arbitrária da matriz associativa no caso de vários arquivos modificados no 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

Responder2

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

Já existe um tópico sobre como fazer isso em superuser.com:https://superuser.com/a/208749/554082

informação relacionada