Есть ли более сжатая альтернатива передаче по каналу в туалет для подсчета файлов в каталоге

От man yum.conf на Fedora 17:

Набор повторений количество раз любая попытка получить файл должен повторить прежде, чем возвратить ошибку. Установка этого к '0' делает вкусную попытку навсегда. Значение по умолчанию равняется '10'.

Так, в/etc/yum.conf, под [основным] разделом, это помогает определить повторения?

Кроме того, существует вкусный-updatesd пакет, который может быть установлен. Если это доступно, можно было бы отредактировать/etc/yum/yum-updatesd.conf для включения автоматических обновлений:

#do_update = no
do_update = yes

И затем конфетка-updatesd перезапуска.

12
01.05.2014, 12:09
5 ответов
[114124] Если вам нужна лаконичность (а не точная корректность при работе с файлами с новыми строками в их именах и т.п.). ), я рекомендую просто наложить псевдонимы [114483]wc -l[114484] на [114485]lc[114486] ("количество строк"):

Как заметили другие, вам не нужна опция [114487]-1[114488] на [114489]ls[114490], так как она автоматическая, когда [114491]ls[114492] пишет в трубу. (Если только у Вас нет [114493]ls[114494] под псевдонимом, чтобы всегда использовать режим столбцов. Я видел это раньше, но не очень часто.)

Псевдоним [114495]lc[114496] довольно удобен в общем, и для этого вопроса, если вы посмотрите на случай "считать текущий каталог", [114497]ls|lc[114498] примерно так лаконичен, как вы можете получить.[114129].

2
27.01.2020, 19:55

Пока единственный подход Аарона более лаконичен, чем твой собственный. Более корректная версия вашего подхода может выглядеть так:

ls -aR1q | grep -Ecv '^\./|/$|^$'

Она рекурсивно перечисляет все файлы - не каталоги - по одному на строку, включая .dotfiles под текущим каталогом, используя глобусы оболочки, необходимые для замены непечатаемых символов. grep отфильтровывает любые списки родительских каталогов или ... или */ или пустые строки - так что в каждом файле должна быть только одна строка - общее количество которых grep возвращает вам. Если вы хотите, чтобы дочерние каталоги были включены, сделайте следующее:

ls -aR1q | grep -Ecv '^\.{1,2}/|^$'

-Удалите -R в любом случае, если вы не хотите рекурсивных результатов.

.
2
27.01.2020, 19:55

f=(target_dir/*);echo ${#f[*]}

корректно работает для файла с пробелами, новыми строками и т.д. в имени.

3
27.01.2020, 19:55

Предполагая bash 4+ (который есть в любой поддерживаемой версии Ubuntu):

num_files() (
    shopt -s nullglob
    cd -P -- "${1-.}" || return
    set -- *
    echo "$#"
)

Назовите его num_files [dir]. dir является необязательным, в противном случае он использует текущую директорию. Ваша оригинальная версия не учитывает скрытые файлы, так же как и это. Если вы хотите, чтобы shopt -s dotglob до установил -- *.

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

num_files() (
    local count=0

    shopt -s nullglob
    cd -P -- "${1-.}" || return
    for file in *; do
        [[ -f $file ]] && let count++
    done
    echo "$count"
)

Если вы нашли GNU, что-то подобное также является опцией (обратите внимание, что сюда входят скрытые файлы, чего не сделала ваша первоначальная команда):

num_files() {
    find "${1-.}" -maxdepth 1 -type f -printf x | wc -c
}

(измените -тип на -тип, если вы также хотите подсчитывать сим-ссылки на обычные файлы).

12
27.01.2020, 19:55

ls является много столбцов, только если он выводит непосредственно на терминал, Вы можете удалить опцию "-1", Вы можете удалить опцию wc "-l", только прочитать первое значение (ленивое решение, не используется для легальных доказательств, уголовных расследований, критических задач, тактических операций...).

ls target | wc 
2
27.01.2020, 19:55

Теги

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