usando coreutils file diviso in pezzi in diverse directory?


1

Come posso usare il splitcomando coreutils di GNU per dividere un file di grandi dimensioni in pezzi di L numero di righe ciascuno, ma inserendo ciascuno dei diversi sottofile in diverse directory nello stesso momento in cui vengono creati?

In questo momento ho uno script perl che crea una gerarchia di directory a partire da ./00/00/00a ./99/99/99e fare stampe perl di ogni linea in sottofile nello script, ma è molto più lento di comando split di GNU avrebbe fatto, la creazione di tutti i file parziali in una directory. Mi piacerebbe averli nella gerarchia delle directory poiché mi renderà le cose più gestibili per me in seguito.

Qualche idea?


Ti accontenterai se qualcosa ordina i file in sottocartelle dopo aver splitdiviso il tuo file?
precipita il

Sarebbe bello se potesse essere fatto mentre la divisione è in funzione.
719016,

Risposte:


0

Il programma non supporta questo (secondo le informazioni e le pagine man). La soluzione migliore è spostare i file dopo che sono stati creati. La tua prossima scommessa migliore è quella di aggiungere questa funzione e inviare una patch al manutentore corrente.

La prima opzione non è poi così difficile da fare e non dovrebbe essere molto lenta se non si è su una condivisione montata in rete. Prendi in considerazione l'utilizzo di una partizione reiserfs falsa per questo:

dd if = / dev / zero of = folder.reserfs bs = 1M seek = 5000 count = 0
losetup / dev / loop7 folder.reserfs
cfdisk / dev / loop7 # (crea 1 partizione primaria)
mkreiserfs / dev / loop7
cartelle mkdir
sudo mount / dev / loop7 cartelle / -o loop
cartelle cd

$ time echo {00..99} / {00..99} / {00..99} | tr '' '\ n' | xargs -L 10000 mkdir -p
tempo: reale 1m28.2s utente 0m9.9s sistema 1m12.0s

sposta i file con qualcosa del genere (probabilmente più saggio per spostare quanti più file possibili contemporaneamente e non 1 per 1 - usa caratteri jolly e xargs -L):

for i in x*; do echo mv $i ${i:1:1}/${i:2:2} ;done
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.