Ошибка обновления Armbian - декабрь 2017 г. - невозможно заблокировать / var / lib / dpkg / lock

Основываясь на моем комментарии, вариант может сделать то, что вы хотите:

find . -depth -type d -exec /bin/sh -c 'printf "%5d %s\n" "$(find {} -type f -printf . | wc -c)" "{}"' \;

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

На вашем примере структуры я получаю:

    4 ./dir1/subdir1
    1 ./dir1/subdir2/subdir3
    4 ./dir1/subdir2
    9 ./dir1
    2 ./dir2
   11 .

(чтобы исключить текущий рабочий каталог, либо измените внешний поиск . - найти * или использовать найти. -mindepth 1

-121--160978-

Попробуйте сделать следующее:

find . -type f | perl -aF/ -lne 'for (my $i=0; $i < @F-1; ++$i) { print join("/",@F[0...$i]); }' | sort | uniq -c

найдите. -type f печатает файлы:

./dir1/subdir2/file8
./dir1/subdir2/file7
./dir1/subdir2/subdir3/file9
./dir1/subdir2/file6
./dir1/file1
...

perl -aF/-lne 'для (my $ i = 0; $ i преобразует каждое имя файла ./a/b/c в набор каталогов . , ./a , ./a/b

Примечание:

не работает с новыми строками в именах файлов. Можно использовать -print0 в найти , -0 в perl и поместить счетчики для каждого каталога в хэш.

Изменить:

Вдохновлен ответом @ Gilles :

find . -depth -print0 |
perl -0 -ne '
my $depth = tr!/!/!;
for (my $i = $prev_depth; $i <= $depth; ++$i) { $totals[$i] = 0; }
if ( -f $_ ) {
  for (my $i = 0; $i <= $depth; ++$i) { ++$totals[$i]; }
} else {
  print "$totals[$depth]\t$_\n";
}
$prev_depth = $depth;
'

Отлично работает с новыми строками в именах файлов. Работает нормально с пустыми каталогами. Не требует дополнительной сортировки | uniq -c .

-121--160976-

Если предполагается, что имя службы является дозвуковым , то при запуске systemctl status subsonic.service и отсутствии ошибок служба дозвукового запускается как системная служба, и в этом случае этот ответ не очень поможет.

Однако если вы получили там ошибку, но вместо этого запустите systemctl --user status subsonic.service и не имеете ошибок, то это означает, что служба запускается под экземпляром пользователя systemd , и первая строка выходных данных указывает, где хранится файл службы. Это означает, что для запуска службы пользователю необходимо сначала войти в систему.

Если требуется запустить службу для всех пользователей, независимо от того, зарегистрирован ли фактический пользователь или нет, переместите файл службы в /etc/systemd/system (список системных путей см. в man systemd.unit ). Кроме того, при необходимости запуска службы от имени определенного пользователя (а не от имени root ) необходимо добавить User = subsonic в раздел [Service] файла (см. man systemd.service ).

После перемещения этого файла выполнение systemctl status subsonic.service должно привести к некоторым выводам (вероятно, служба неактивна, но загружена), а выполнение systemctl --user status subsonic.service должно привести к ошибке.

0
19.12.2017, 18:11
0 ответов

Теги

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