Move 2000 PDFs em várias pastas, cada uma contendo 100 arquivos

1

Eu tenho uma pasta com 2000 arquivos PDF em um Mac. Usando a linha de comando, gostaria de mover cada 100 PDFs para outra pasta a ser criada no mesmo diretório. Assim, eu teria 20 pastas (chamadas de 1, 2, etc.), cada uma contendo 100 PDFs no diretório principal. Como posso conseguir isso?

    
por Til Hund 13.07.2017 / 13:15

2 respostas

1

Você pode usar set , processar lotes de 100 arquivos por meio de "${@:START:COUNT}" (intervalo de parâmetros posicionais) e shift 100 ao incrementar um contador c para criar os diretórios:

set -- *.pdf
c=1
while (($#)); do
  mkdir ${c}
  if [ $# -ge 100 ]; then
    mv -- "${@:1:100}" ${c}
    c=$((c+1))
    shift 100
  else
    mv -- "${@}" ${c}
    shift $#
  fi
done
    
por 13.07.2017 / 21:20
1

Acabei de escrever abaixo o script bash para o seu problema específico. Isso pode ajudá-lo.

#!/bin/bash

DEFAULT_DELIM_SIZE=100
num_of_total_file=$(ls | grep "pdf" | wc -l)
num_of_total_folder=$((num_of_total_file/DEFAULT_DELIM_SIZE))

echo "Total number of pdf files = $num_of_total_file"
echo "Total number of folder will generated if not exist $num_of_total_folder"

# create directories if not exist
for (( i = 0; i < $num_of_total_folder; i++ )); do
    if [[ ! -d $i ]]; then
        mkdir $i
    fi
done

# file name format should be like this <arbitrary_numb>-<folder_num>.pdf
for file in *.pdf; do
    prefix=$(echo $file | awk '{split($0, a, "-"); print a[2]}' | awk '{split($0, a, "."); print a[1]}')
    if [[ -d $prefix ]]; then
        mv $file $prefix
    fi
done
    
por 13.07.2017 / 16:17

Tags