Сплит большого файла, произвольный номер начального индекса

Все ответы, предлагающие wpa_supplicant, неверны. Да, он может подключить вас к сети WPA, но это плохое решение в долгосрочной перспективе, потому что будет очень сложно поддерживать и не будет хорошо играть с проводным подключением. Прочитайте этот ответ и упростите свою жизнь, используя Network Manager из командной строки. Я потратил несколько часов, пытаясь настроить wpa_supplicant, а затем попробовал nmcli, и он «просто сработал».

2
задан 1 January 2011 в 18:01

18 ответов

Не так важно перенумеровать файлы после этого.

split -a 5 -d -l 10000 large_input_file /out_path/tmp.
for x in /outpath/tmp.*; do
  mv -i -- "$x" "${x%/*}/out.$(printf %05d $((10#${x##*.}+1)))";
done

Обратите внимание на пару подводных камней:

Наивный подход к переименованию out.00000 в out.00001 и поэтому не работает, потому что globbing расширяется до лексикографически упорядоченного списка, поэтому первое переименование будет перезаписывать второй файл. В zsh вы можете использовать квалификатор glob (On). В других оболочках самым простым способом является изменение основы названия. Ведущая 0 в арифметике оболочки вызывает интерпретацию числа в восьмеричном. 10#${…} заставляет десятичную интерпретацию. printf %05d - способ поддерживать отступ до 5 цифр.
1
ответ дан 25 May 2018 в 23:43
  • 1
    приятно, и, заменив +1 на + $ start_id, я получаю произвольный первый индекс ... – nEJC 2 January 2011 в 19:49
  • 2
    Кстати. в чем смысл - в команде mv? Не может ли шов найти его ... возможно, «больше нет переключателей после этой точки», правильно? – nEJC 2 January 2011 в 19:52
  • 3
    @nEJC: Да, именно так. В этом конкретном случае это необязательно, потому что аргументы не могут начинаться с -, но это хорошая привычка войти (и это рефлекс со мной). – Gilles 2 January 2011 в 20:15

Не так важно перенумеровать файлы после этого.

split -a 5 -d -l 10000 large_input_file /out_path/tmp. for x in /outpath/tmp.*; do mv -i -- "$x" "${x%/*}/out.$(printf %05d $((10#${x##*.}+1)))"; done

Обратите внимание на пару подводных камней:

Наивный подход к переименованию out.00000 в out.00001 и поэтому не работает, потому что globbing расширяется до лексикографически упорядоченного списка, поэтому первое переименование будет перезаписывать второй файл. В zsh вы можете использовать квалификатор glob (On). В других оболочках самым простым способом является изменение основы названия. Ведущая 0 в арифметике оболочки вызывает интерпретацию числа в восьмеричном. 10#${…} заставляет десятичную интерпретацию. printf %05d - способ поддерживать отступ до 5 цифр.
1
ответ дан 25 July 2018 в 22:40

Не так важно перенумеровать файлы после этого.

split -a 5 -d -l 10000 large_input_file /out_path/tmp. for x in /outpath/tmp.*; do mv -i -- "$x" "${x%/*}/out.$(printf %05d $((10#${x##*.}+1)))"; done

Обратите внимание на пару подводных камней:

Наивный подход к переименованию out.00000 в out.00001 и поэтому не работает, потому что globbing расширяется до лексикографически упорядоченного списка, поэтому первое переименование будет перезаписывать второй файл. В zsh вы можете использовать квалификатор glob (On). В других оболочках самым простым способом является изменение основы названия. Ведущая 0 в арифметике оболочки вызывает интерпретацию числа в восьмеричном. 10#${…} заставляет десятичную интерпретацию. printf %05d - способ поддерживать отступ до 5 цифр.
1
ответ дан 26 July 2018 в 23:35

Не так важно перенумеровать файлы после этого.

split -a 5 -d -l 10000 large_input_file /out_path/tmp. for x in /outpath/tmp.*; do mv -i -- "$x" "${x%/*}/out.$(printf %05d $((10#${x##*.}+1)))"; done

Обратите внимание на пару подводных камней:

Наивный подход к переименованию out.00000 в out.00001 и поэтому не работает, потому что globbing расширяется до лексикографически упорядоченного списка, поэтому первое переименование будет перезаписывать второй файл. В zsh вы можете использовать квалификатор glob (On). В других оболочках самым простым способом является изменение основы названия. Ведущая 0 в арифметике оболочки вызывает интерпретацию числа в восьмеричном. 10#${…} заставляет десятичную интерпретацию. printf %05d - способ поддерживать отступ до 5 цифр.
1
ответ дан 2 August 2018 в 04:06

Не так важно перенумеровать файлы после этого.

  split -a 5 -d -l 10000 large_input_file / out_path / tmp.  для x в /outpath/tmp.*;  do mv -i - "$ x" "$ {x% / *} / out. $ (printf% 05d $ ((10 # $ {x ## *.} + 1)))";   

Обратите внимание на пару подводных камней:

  • Наивный подход к переименованию out.00000 в out.00001 и т. д. не работает, потому что globbing расширяется до лексикографически упорядоченного списка, поэтому первое переименование будет перезаписывать второй файл. В zsh вы можете использовать квалификатор (Вкл.) glob. В других оболочках самым простым способом является также изменение основы имени.
  • Ведущая 0 в арифметике оболочки заставляет число интерпретировать в восьмеричном. 10 # $ {...} заставляет десятичную интерпретацию
  • printf% 05d - способ поддерживать отступ до 5 цифр.
1
ответ дан 4 August 2018 в 20:10

Не так важно перенумеровать файлы после этого.

  split -a 5 -d -l 10000 large_input_file / out_path / tmp.  для x в /outpath/tmp.*;  do mv -i - "$ x" "$ {x% / *} / out. $ (printf% 05d $ ((10 # $ {x ## *.} + 1)))";   

Обратите внимание на пару подводных камней:

  • Наивный подход к переименованию out.00000 в out.00001 и т. д. не работает, потому что globbing расширяется до лексикографически упорядоченного списка, поэтому первое переименование будет перезаписывать второй файл. В zsh вы можете использовать квалификатор (Вкл.) glob. В других оболочках самым простым способом является также изменение основы имени.
  • Ведущая 0 в арифметике оболочки заставляет число интерпретировать в восьмеричном. 10 # $ {...} заставляет десятичную интерпретацию
  • printf% 05d - способ поддерживать отступ до 5 цифр.
1
ответ дан 6 August 2018 в 04:11

Не так важно перенумеровать файлы после этого.

  split -a 5 -d -l 10000 large_input_file / out_path / tmp.  для x в /outpath/tmp.*;  do mv -i - "$ x" "$ {x% / *} / out. $ (printf% 05d $ ((10 # $ {x ## *.} + 1)))";   

Обратите внимание на пару подводных камней:

  • Наивный подход к переименованию out.00000 в out.00001 и т. д. не работает, потому что globbing расширяется до лексикографически упорядоченного списка, поэтому первое переименование будет перезаписывать второй файл. В zsh вы можете использовать квалификатор (Вкл.) glob. В других оболочках самым простым способом является также изменение основы имени.
  • Ведущая 0 в арифметике оболочки заставляет число интерпретировать в восьмеричном. 10 # $ {...} заставляет десятичную интерпретацию
  • printf% 05d - способ поддерживать отступ до 5 цифр.
1
ответ дан 7 August 2018 в 22:11

Не так важно перенумеровать файлы после этого.

  split -a 5 -d -l 10000 large_input_file / out_path / tmp.  для x в /outpath/tmp.*;  do mv -i - "$ x" "$ {x% / *} / out. $ (printf% 05d $ ((10 # $ {x ## *.} + 1)))";   

Обратите внимание на пару подводных камней:

  • Наивный подход к переименованию out.00000 в out.00001 и т. д. не работает, потому что globbing расширяется до лексикографически упорядоченного списка, поэтому первое переименование будет перезаписывать второй файл. В zsh вы можете использовать квалификатор (Вкл.) glob. В других оболочках самым простым способом является также изменение основы имени.
  • Ведущая 0 в арифметике оболочки заставляет число интерпретировать в восьмеричном. 10 # $ {...} заставляет десятичную интерпретацию
  • printf% 05d - способ поддерживать отступ до 5 цифр.
1
ответ дан 10 August 2018 в 10:25

Не так важно перенумеровать файлы после этого.

  split -a 5 -d -l 10000 large_input_file / out_path / tmp.  для x в /outpath/tmp.*;  do mv -i - "$ x" "$ {x% / *} / out. $ (printf% 05d $ ((10 # $ {x ## *.} + 1)))";   

Обратите внимание на пару подводных камней:

  • Наивный подход к переименованию out.00000 в out.00001 и т. д. не работает, потому что globbing расширяется до лексикографически упорядоченного списка, поэтому первое переименование будет перезаписывать второй файл. В zsh вы можете использовать квалификатор (Вкл.) glob. В других оболочках самым простым способом является также изменение основы имени.
  • Ведущая 0 в арифметике оболочки заставляет число интерпретировать в восьмеричном. 10 # $ {...} заставляет десятичную интерпретацию
  • printf% 05d - способ поддерживать отступ до 5 цифр.
1
ответ дан 13 August 2018 в 16:51
  • 1
    приятно, и, заменив +1 на + $ start_id, я получаю произвольный первый индекс ... – nEJC 2 January 2011 в 19:49
  • 2
    Кстати. в чем смысл - в команде mv? Не может ли шов найти его ... возможно, «больше нет переключателей после этой точки», правильно? – nEJC 2 January 2011 в 19:52
  • 3
    @nEJC: Да, именно так. В этом конкретном случае это необязательно, потому что аргументы не могут начинаться с - , но это хорошая привычка входить (и это рефлекс со мной). – Gilles 2 January 2011 в 20:15

Я думаю, что этот вариант не существует в split. У меня есть эта ошибка (просьба об авторе) для coreutils - http://savannah.gnu.org/bugs/?22231

0
ответ дан 25 May 2018 в 23:43

Я думаю, что этот вариант не существует в split. У меня есть эта ошибка (просьба об авторе) для coreutils - http://savannah.gnu.org/bugs/?22231

0
ответ дан 25 July 2018 в 22:40

Я думаю, что этот вариант не существует в split. У меня есть эта ошибка (просьба об авторе) для coreutils - http://savannah.gnu.org/bugs/?22231

0
ответ дан 26 July 2018 в 23:35

Я думаю, что этот вариант не существует в split. У меня есть эта ошибка (просьба об авторе) для coreutils - http://savannah.gnu.org/bugs/?22231

0
ответ дан 2 August 2018 в 04:06

Я думаю, что этот вариант не существует в split. У меня есть эта ошибка (запрос функции) для coreutils - http://savannah.gnu.org/bugs/?22231

0
ответ дан 4 August 2018 в 20:10

Я думаю, что этот вариант не существует в split. У меня есть эта ошибка (запрос функции) для coreutils - http://savannah.gnu.org/bugs/?22231

0
ответ дан 6 August 2018 в 04:11

Я думаю, что этот вариант не существует в split. У меня есть эта ошибка (запрос функции) для coreutils - http://savannah.gnu.org/bugs/?22231

0
ответ дан 7 August 2018 в 22:11

Я думаю, что этот вариант не существует в split. У меня есть эта ошибка (запрос функции) для coreutils - http://savannah.gnu.org/bugs/?22231

0
ответ дан 10 August 2018 в 10:25

Я думаю, что этот вариант не существует в split. У меня есть эта ошибка (запрос функции) для coreutils - http://savannah.gnu.org/bugs/?22231

0
ответ дан 13 August 2018 в 16:51

Другие вопросы по тегам:

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