Как разделить файлы с числовыми именами?

# pkg info | grep mount
automount-1.5.7
# pkg remove automount
1
06.01.2019, 03:09
2 ответа

По крайней мере, с версией GNU Coreutils splitвы можете сделать это следующим образом:

split -l300 --numeric-suffixes=1 --suffix-length=1 --additional-suffix=".lst"  file ""

Обратите внимание на использование ""для указания пустого префикса (части xaимени файла по умолчанию )и использование --numeric-suffixesвместо -d(, которое всегда начинается с 0 ).

Также обратите внимание, что это предполагает, что разделяемый файл содержит не более 9 x 300 строк -, в противном случае splitбудет жаловаться, чтоoutput file suffixes exhausted

Пр.

$ split -l300 --numeric-suffixes=1 --suffix-length=1 --additional-suffix=".lst" --verbose file ""
creating file '1.lst'
creating file '2.lst'
creating file '3.lst'
creating file '4.lst'
2
27.01.2020, 23:42

Попробуйте это:

 split --additional-suffix='.lst' -da3 -l 1024 list.lst ''

Причина перехода к9000(для более чем 89 частей )заключается в том, что числовая длина по умолчанию равна 2.

Измените с помощью опции -a. Чтобы нумерация файлов оставалась числовой (и была монотонной (, всегда увеличивайте ))и используйте длину, превышающую максимальное значение возможного количества разбиений.

 $ split -a 3 -d -l1024./list.lst

 $ ls
 list.lst  x009  x019  x029  x039  x049  x059  x069  x079  x089  x099  x109  x119
 x000      x010  x020  x030  x040  x050  x060  x070  x080  x090  x100  x110  x120
 x001      x011  x021  x031  x041  x051  x061  x071  x081  x091  x101  x111  x121
 x002      x012  x022  x032  x042  x052  x062  x072  x082  x092  x102  x112  x122
 x003      x013  x023  x033  x043  x053  x063  x073  x083  x093  x103  x113  x123
 x004      x014  x024  x034  x044  x054  x064  x074  x084  x094  x104  x114  x124
 x005      x015  x025  x035  x045  x055  x065  x075  x085  x095  x105  x115  x125
 x006      x016  x026  x036  x046  x056  x066  x076  x086  x096  x106  x116  x126
 x007      x017  x027  x037  x047  x057  x067  x077  x087  x097  x107  x117  x127
 x008      x018  x028  x038  x048  x058  x068  x078  x088  x098  x108  x118

Чтобы изменить x, просто изменитеPREFFIX(по умолчаниюx)(после имени файла):

 split -a 3 -d -l 1024 list.lst ''

Который будет называть файлы 000. Чтобы получить завершающий .lst, добавьте параметр --additional-suffix='.lst', короче говоря, используйте этот:

 split --additional-suffix='.lst' -da3 -l 1024 list.lst ''

Если вам нужно, чтобы начальное числовое значение было 001, используйте:

 split --additional-suffix='.lst' --numeric-suffixes=1 -a 3 -l 1024 list.lst ''

Но нет, невозможно получить числовые значения, такие как 1,2,3,...,21,..,107 без переименования.

Переименование может решить все проблемы в два этапа с помощью простого цикла:

 split -l 1024 -d -a 8 list.lst
 for f in x[0-9]*; do
     mv "$f" "$((10#${f#x}+1)).lst"
 done
0
27.01.2020, 23:42

Теги

Похожие вопросы