Como adiciono arquivos a uma pasta até que um limite de tamanho seja atingido?

2

Eu tenho uma pasta com 1,5 milhões de arquivos (arquivos de mensagens) de vários tamanhos. Desejo criar um diretório, por exemplo a , e mover ( mv ) alguns desses arquivos (que começam com um registro de data e hora numérico) para a pasta a , até que a pasta a seja de até um especificado Tamanho. Como eu faria isso?

Evitar qualquer loop procedural for ou while seria uma vantagem (ou seja, uma linha), mas tudo o que funciona é ótimo!

    
por Oliver Williams 04.11.2017 / 19:23

2 respostas

1

max_k=1000
sum=0
target_dir_path="/target/dir"
find . -mindepth 1 -maxdepth 1 -type f -printf '%k %p
max_k=1000
sum=0
target_dir_path="/target/dir"
find . -mindepth 1 -maxdepth 1 -type f -printf '%k %p%pre%' |
   while IFS= read -r -d $'%pre%' line; do
       size="${line%% *}"
       path="${line#* }"
       sum=$((sum+size))
       if [ "$sum" -le "$max_k" ]; then
           printf "%s%pre%" "$path"
       else
           break
       fi
    done | xargs -0 echo mv -t "target_dir_path"
' | while IFS= read -r -d $'%pre%' line; do size="${line%% *}" path="${line#* }" sum=$((sum+size)) if [ "$sum" -le "$max_k" ]; then printf "%s%pre%" "$path" else break fi done | xargs -0 echo mv -t "target_dir_path"
    
por 04.11.2017 / 21:18
-1

Você pode criar LV especial (ou partição) de tamanho desejado e montá-lo sob o diretório 'a'.

Se você quiser deixar algum espaço livre, combine-o com a cota.

Houve uma pergunta semelhante:

link

    
por 04.11.2017 / 20:44