Como copiar um número de arquivos usando a linha de comando?

3

Eu tenho uma pasta de 200k arquivos que eu quero dividir em pastas de arquivos de 25k usando cp ou qualquer outro comando cli que possa fazer a coisa

    
por Gy0m 17.07.2017 / 10:31

3 respostas

1

Eu usei este comando:

files=(*); 
num=$((${#files[@]}/8));
k=1
for ((i=0; i<${#files[@]}; i+=$num)); do 
tar cvzf files$k.tgz -- "${files[@]:$i:$num}"
((k++))
done

deste post: Como tar.gz muitos arquivos de tamanho similar em múltiplos arquivos com um limite de tamanho compartilhados por Jacob Vlijm. Ele comprime todos os arquivos em vários arquivos .tgz , o que é bom para mim. Você pode mudar o número para dividir, aqui 8 me dá 8 arquivos compactados com 25k arquivos dentro de + 1 arquivo compactado com apenas 2 arquivos dentro. Isso fez o trabalho para mim.

    
por Gy0m 17.07.2017 / 11:46
0

Você pode usar o comando 'find' com xargs e passar o comando multi para primeiro ler um valor de um arquivo e configurá-lo para uma variável que usaremos no novo nome do diretório como um ID e criar o próximo movimento do diretório os arquivos nele e incrementar o contador de ID e salvá-lo em um arquivo para manter o último valor dele.

aqui é o comando,

find -maxdepth 1 -type f |xargs -n25000 bash -c 'readID=$(< ../ID.txt); echo mkdir directory_$readID; echo mv -v $@ -t directory_$readID/; echo $(expr ${readID} + 1)> ../ID.txt'

p. note que por favor escreva o ID de início no arquivo ID.txt antes de executar o comando acima

echo "1" > ../ID.txt

este ID.txt é um nível acima do diretório de trabalho atual.

uma vez que você verificou o comando e viu o que está acontecendo, então remova o comando 'echo' deste comando ' echo mv -v $@ -t directory_$readID/; ' e atrás de 'mkdir' para executar a movimentação real e redefina o ID.txt

echo "1" > ../ID.txt
    
por αғsнιη 18.07.2017 / 14:26
0

Você poderia tar a árvore de diretórios, "dividir" e "cat" de volta.

Isso pode ajudar. Não verifiquei os comandos, mas lembro que funciona, há 400 anos atrás.

link

    
por Nobody 19.07.2017 / 16:56