Шарик с числовым порядком

Rar является общей утилитой для операций, таких как это, поскольку это доступно на обеих платформах.

Однако другой подход должен использовать split.

split -b 1024m -d somefile somefile.

Затем используйте 7zip на машине Windows, чтобы повторно объединить файлы.

Rar имеет преимущество того, чтобы быть немного более простым, но требует, чтобы он был установлен на обеих машинах. Разделение имеет преимущество его являющийся быстрее, поскольку это не должно помещать данные в архив, но оставляет его, как.

28
10.05.2012, 12:28
5 ответов

В зависимости от Вашей среды можно использовать ls -v с GNU coreutils, например:

gs -q -sPAPERSIZE=a4 -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \
   -sOutputFile=out.pdf $(ls -v)

Или если Вы находитесь на последних версиях FreeBSD или OpenBSD:

gs -q -sPAPERSIZE=a4 -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \
   -sOutputFile=out.pdf $(ls | sort -V)
12
27.01.2020, 19:39
  • 1
    ls -v будет natural sort of (version) numbers within text таким образом, это может использоваться также... –  Sundeep 03.10.2016, 15:21
  • 2
    @Sundeep: Действительно, но это, кажется, GNU coreutils только решение. –  Thor 03.10.2016, 17:11
  • 3
    да, походит на конкретный GNU - pubs.opengroup.org/onlinepubs/9699919799 –  Sundeep 03.10.2016, 17:21
  • 4
    @Sundeep: -V функция sort не указан POSIX также. Однако это, кажется, распространилось дальше, например, и FreeBSD и OpenBSD sort поддерживайте его. –  Thor 03.10.2016, 17:25
  • 5
    , о, хорошо, можно ли добавить эти детали для ответа также? Я столкнулся с этим ответом при поиске подобной проблемы (шарик в числовом порядке) и наблюдение ls используемый я проверил, если это имело опцию отдельно вместо того, чтобы передать по каналу к виду :) –  Sundeep 03.10.2016, 17:30

Еще раз спецификаторы шарика zsh приходят на помощь.

echo *.pdf(n)
23
27.01.2020, 19:39

Если нет никаких разрывов, следующее могло бы оказаться полезным (хотя поверхностный и не устойчивые касающиеся пограничные случаи и общность) - только для понимания:

FILES="c0.pdf"
for i in $(seq 1 20); do FILES="${FILES} c${i}.pdf"; done
gs [...args...] $FILES

Если могут быть разрывы, некоторые [ -f c${i}.pdf ] проверка могла быть добавлена.

Редактирование также видит этот ответ, согласно которому Вы могли (использование Bash) использование

gs [..args..] c{1..20}.pdf
5
27.01.2020, 19:39
  • 1
    Это обычно - хорошая идея заключить Ваши ссылки на переменную оболочки в кавычки (например, "$FILES" и "$i") если у Вас нет серьезного основания не к, и Вы уверены, что знаете то, что Вы делаете.   (В отличие от этого, в то время как фигурные скобки могут быть важными, они не так важны как кавычки,   так, например, "c$i.pdf" достаточно хорошо.)   команда как gs  [ …args… ]  $FILES, где $FILES содержит разделенный пробелом список файлов, может походить на серьезное основание использовать $FILES не заключая его в кавычки (потому что "$FILES" не будет работать в том контексте).   …   (Cont’d) –  G-Man Says 'Reinstate Monica' 04.10.2016, 23:19
  • 2
    (Cont’d) …  , Но видит последствия безопасности упущения заключить переменную в кавычки в оболочках удара/POSIX, в частности, моем ответе на него, для примечаний по тому, как обработать переменные многословные как массивы в ударе (например, FILES=("c0.pdf") и FILES+=("c$i.pdf")); также этот ответ, который использует технику, которую я предлагаю. –  G-Man Says 'Reinstate Monica' 04.10.2016, 23:27

Если все файлы, о которых идет речь, имеют одинаковый префикс (т. Е. Текст перед номером; c в данном случае), вы можно использовать

gs  …args…  c?.pdf c??.pdf

c? .pdf расширяется до c0.pdf c1.pdf c9.pdf . c ??. Pdf расширяется до c10.pdf c11.pdf c20.pdf (и до c99.pdf , если применимо). В то время как каждое слово командной строки, содержащее символ (символы) раскрытия имени , расширяется до списка имен файлов, отсортированных (упорядоченных) в соответствии с с LC_COLLATE переменная, списки, полученные в результате расширения соседних подстановочных знаков (globs) , не объединяются; они просто связаны. (Мне кажется, я припоминаю, что когда-то это явно говорилось на странице руководства оболочки, , но сейчас я не могу его найти.)

Конечно, если файлы могут подняться до c999.pdf , следует использовать c? .pdf c ??. pdf c ???. pdf . По общему признанию, это может стать утомительным, если у вас много цифр. Вы можете немного сократить его; например, для (до) пяти цифр вы можете использовать c? {,? {,? {,? {,?}}}}. pdf . Если список имен файлов невелик (например, есть c0.pdf и c12345.pdf , но нет обязательно каждое число между ними), вам, вероятно, следует установить параметр nullglob . В противном случае, если (например) у вас нет файлов с двузначными числами, вы получите буквальный аргумент c ??. Pdf , переданный вашей программе.

Если у вас несколько префиксов (например, a <номер> .pdf , b <номер> .pdf , и c <номер> .pdf , с номерами из одной или двух цифр), {{ 1}} вы можете использовать очевидный метод грубой силы:

a?.pdf a??.pdf b?.pdf b??.pdf c?.pdf c??.pdf

или свернуть его в {a, b, c}? {,?}. Pdf .

13
27.01.2020, 19:39

Просто цитирую и исправляю ответ Тора... НИКОГДА не анализируйте ls!

Вы можете использовать sort -V(расширение не-POSIX для сортировки):

printf '%s\0' ./* | sort -zV \
    | xargs -0 gs -q -sPAPERSIZE=a4 -dNOPAUSE -dBATCH \
        -sDEVICE=pdfwrite -sOutputFile=out.pdf

(для некоторых команд, видимо для gs есть такая команда, вам нужно "./ " вместо ""... если один не работает, попробуйте другой)

1
27.01.2020, 19:39

Теги

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