Verwenden von coreutils Dateien in verschiedene Verzeichnisse aufteilen?

684
719016

Wie kann ich den splitBefehl coreutils von GNU verwenden, um eine große Datei in jeweils L Zeilen zu teilen, aber die verschiedenen Subdateien gleichzeitig in verschiedene Verzeichnisse zu legen, in denen sie erstellt werden?

Im Moment habe ich ein Perl-Skript, das eine Hierarchie von Verzeichnissen erstellt, die von ./00/00/00bis zu ./99/99/99und Perl-Drucke jeder Zeile in Subdateien des Skripts ausführen, aber es ist viel langsamer als der split-Befehl von GNU und erstellt alle Subdateien in einem Verzeichnis. Ich möchte sie in der Hierarchie der Verzeichnisse haben, da dies die Dinge später für mich leichter handhabbar macht.

Irgendwelche Ideen?

1
Wirst du zufrieden sein, wenn Dateien nach "Teilen" in Unterordner sortiert werden, wird die Datei aufgeteilt? rush vor 12 Jahren 0
Es wäre großartig, wenn dies getan werden könnte, während * die Aufteilung funktioniert. 719016 vor 12 Jahren 0

1 Antwort auf die Frage

0
Ярослав Рахматуллин

The program does not support this (according to the info and man pages). You best bet is to move the files after they are created. Your next best bet is to add this feature and mail a patch to the current maintainer.

The first option is really not that hard to do and should not be very slow unless you are on a network mounted share. Consider using a fake reiserfs partition for this:

dd if=/dev/zero of=folders.reserfs bs=1M seek=5000 count=0 losetup /dev/loop7 folders.reserfs cfdisk /dev/loop7 # (make 1 primary partition) mkreiserfs /dev/loop7 mkdir folders sudo mount /dev/loop7 folders/ -o loop cd folders $ time echo // |tr ' ' '\n' | xargs -L 10000 mkdir -p time: Real 1m28.2s User 0m9.9s System 1m12.0s 

move the files with something like (probably wiser to move as many files as possible at once and not 1 by 1 - use wildcards and xargs -L):

for i in x*; do echo mv $i $/$ ;done