Имя первого файла в каталоге, полученном оптимальным образом

В пакете Debian нет возможности сказать «Разрешить установку только с 14.04». Это должно произойти на уровне хранилища apt (который я получу вскоре позже). Полу-исключение заключается в том, что, поскольку Trusty новее, чем Precise, Trusty будет иметь переименованные некоторые пакеты библиотек (которые до тех пор, пока пользователь не использует PPA, который предоставляет эти пакеты, сделает их неустановимыми) и будет иметь более новые версии библиотеки, для которых dh-shlibdeps может добавить требование к версии. Поэтому в обоих случаях пакет будет удален в Precise. Обратите внимание, что пакет, созданный для Precise, может быть установлен в Trusty.

Что касается репозитория apt, пакеты имеют отдельный номер версии debian для каждой версии. Формат, который вы описываете, может работать, хотя использование ~ является более распространенным, отчасти потому, что ~ меньше всех других символов, и поэтому, если пользователь обновляется до более новой версии (например, от Precise to Trusty), а пакет присутствовать в официальных репозиториях (с номером версии 1.0.0-3, тогда пользователь будет обновляться с 1.0.0-3~precise1 до 1.0.0-3, даже если у вас есть 1.0.0-3~trusty1. Это не будет применяться, если вы используете любой другой символ. Я лично использую что-то вроде 1.0.0-0ubuntu1~ppa1~precise1, а часть ~ppa1 - это меньше, чем любой официальный пакет Ubuntu, который может появиться в будущем, а часть ~precise1 должна указывать выпуск. Другие поддерживающие PPA могут использовать или 1.0.0-3~14.04.1, указав номер версии вместо кодового имени, которая, как гарантируется, будет увеличиваться (если номера версий Ubuntu не сбрасываются).

Обратите внимание, что двоичные пакеты имеют одинаковый источник пакет, поэтому вам нужно убедиться, что ваш файл .changes не включает исходный пакет.

1
задан 16 August 2017 в 18:08

3 ответа

Это сложно. Два подхода:

Подход 1; find:

find . -mindepth 1 -print -quit

find и -print s первый найденный файл и -quit s немедленно. -mindepth 1 не позволит совместить жесткую ссылку . с текущим каталогом.

Если вас интересуют только обычные файлы, добавьте -type f:

find . -type f  -print -quit

-mindepth 1 может быть отброшен, тогда как ., являющийся каталогом, не будет сопоставлен.

Подход 1; find:

Обратите внимание, что это может привести к срабатыванию ARG_MAX для слишком большого количества файлов (слишком длинный список аргументов, по ARG_MAX байтам). В этом случае используйте [1]

любую оболочку builin (например, printf, echo), чтобы распечатать фреймворк оболочки файла *, чтобы выполнить расширение (порядок сортировки должен быть равен как ls для данного locale 's LC_COLLATE) stdbuf -o0 (stdbuf поставляется с GNU coreutils), чтобы сделать поток STDOUT из printf / echo небуферизованного канала (| ) STDOUT printf / echo до awk и exit после печати первой записи. После выхода awk, stdbuf (printf) получит SIGPIPE и будет убит. Я бы используйте printf, чтобы получить имена файлов, разделенные ASCII NUL (\0), и используйте \0 в качестве разделителя записей в awk, чтобы разрешить любые случаи кромок в отношении имен файлов

Объединяя их вместе:

stdbuf -o0 printf '%s\0' * | awk 'BEGIN{RS="\0"} {print;  exit}'
2
ответ дан 22 May 2018 в 19:24
  • 1
    Выглядит потрясающе, но: stdbuf -o0 printf '% s \ 0' raw / all / * | awk 'BEGIN {RS = "\ 0"} {print; exit} 'сначала запустил мой терминал, но в каталоге с 200k файлами печатается: bash: /usr/bin/stdbuf: List of arguments too long. Поэтому, если невозможно получить первый файл из-за сортировки, мы можем изменить вопрос: «Как получить какое-либо имя файла, не обязательно сначала? & Quot; – Daniel 16 August 2017 в 18:35
  • 2
    @Daniel Ahhh, ARG_MAX запускается. Работает ли find . -mindepth 1 -print -quit? Подготовьте stdbuf -o0 также ... – heemayl 16 August 2017 в 19:10
  • 3
    Да. Пожалуйста, обновите свой ответ и объясните, почему мы хотим иметь поток unbuffored? Он работает с stdbuf -o0 и без него. – Daniel 16 August 2017 в 19:22
  • 4
    @ Даниэль Обновлено. stdbuf -o0 здесь не требуется, потому что find немедленно уходит, нет возможности хранить в буфере и промывать позже. – heemayl 16 August 2017 в 19:32

Это сложно. Два подхода:

Подход 1; find:

find . -mindepth 1 -print -quit

find и -print s первый найденный файл и -quit s немедленно. -mindepth 1 не позволит совместить жесткую ссылку . с текущим каталогом.

Если вас интересуют только обычные файлы, добавьте -type f:

find . -type f -print -quit

-mindepth 1 может быть отброшен, тогда как ., являющийся каталогом, не будет сопоставлен.

Подход 1; find:

Обратите внимание, что это может привести к срабатыванию ARG_MAX для слишком большого количества файлов (слишком длинный список аргументов, по ARG_MAX байтам). В этом случае используйте [1]

любую оболочку builin (например, printf, echo), чтобы распечатать фреймворк оболочки файла *, чтобы выполнить расширение (порядок сортировки должен быть равен как ls для данного locale 's LC_COLLATE) stdbuf -o0 (stdbuf поставляется с GNU coreutils), чтобы сделать поток STDOUT из printf / echo небуферизованного канала (| ) STDOUT printf / echo до awk и exit после печати первой записи. После выхода awk, stdbuf (printf) получит SIGPIPE и будет убит. Я бы используйте printf, чтобы получить имена файлов, разделенные ASCII NUL (\0), и используйте \0 в качестве разделителя записей в awk, чтобы разрешить любые случаи кромок в отношении имен файлов

Объединяя их вместе:

stdbuf -o0 printf '%s\0' * | awk 'BEGIN{RS="\0"} {print; exit}'
2
ответ дан 18 July 2018 в 08:26

Это сложно. Два подхода:

Подход 1; find:

find . -mindepth 1 -print -quit

find и -print s первый найденный файл и -quit s немедленно. -mindepth 1 не позволит совместить жесткую ссылку . с текущим каталогом.

Если вас интересуют только обычные файлы, добавьте -type f:

find . -type f -print -quit

-mindepth 1 может быть отброшен, тогда как ., являющийся каталогом, не будет сопоставлен.

Подход 1; find:

Обратите внимание, что это может привести к срабатыванию ARG_MAX для слишком большого количества файлов (слишком длинный список аргументов, по ARG_MAX байтам). В этом случае используйте [1]

любую оболочку builin (например, printf, echo), чтобы распечатать фреймворк оболочки файла *, чтобы выполнить расширение (порядок сортировки должен быть равен как ls для данного locale 's LC_COLLATE) stdbuf -o0 (stdbuf поставляется с GNU coreutils), чтобы сделать поток STDOUT из printf / echo небуферизованного канала (| ) STDOUT printf / echo до awk и exit после печати первой записи. После выхода awk, stdbuf (printf) получит SIGPIPE и будет убит. Я бы используйте printf, чтобы получить имена файлов, разделенные ASCII NUL (\0), и используйте \0 в качестве разделителя записей в awk, чтобы разрешить любые случаи кромок в отношении имен файлов

Объединяя их вместе:

stdbuf -o0 printf '%s\0' * | awk 'BEGIN{RS="\0"} {print; exit}'
2
ответ дан 24 July 2018 в 19:05

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

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