Если я пойму Вас правильно, то это даст Вам, хотят Вас, хотите:
find /path/to/target -type d | while IFS= read -r dir; do
echo -ne "$dir\tsize: $(du -sh "$dir" | cut -f 1)"
echo -ne "\tsubdirs: $(find "$dir" -mindepth 1 -type d | wc -l)"
echo -e "\tfiles: $(find "$dir" -type f | wc -l )";
done | tac
Если Вы работаете на этом /boot
например, Вы производитесь как это:
/boot/burg/themes/sora_extended size: 8.0K subdirs: 0 files: 1
/boot/burg/themes/radiance/images size: 196K subdirs: 0 files: 48
/boot/burg/themes/radiance size: 772K subdirs: 1 files: 53
/boot/burg/themes/winter size: 808K subdirs: 0 files: 35
/boot/burg/themes/icons size: 712K subdirs: 0 files: 76
/boot/burg/themes size: 8.9M subdirs: 26 files: 440
/boot/burg/fonts size: 7.1M subdirs: 0 files: 74
/boot/burg size: 20M subdirs: 29 files: 733
/boot/grub/locale size: 652K subdirs: 0 files: 17
/boot/grub size: 4.6M subdirs: 1 files: 224
/boot/extlinux/themes/debian-wheezy/extlinux size: 732K subdirs: 0 files: 11
/boot/extlinux/themes/debian-wheezy size: 1.5M subdirs: 1 files: 22
/boot/extlinux/themes size: 1.5M subdirs: 2 files: 22
/boot/extlinux size: 1.6M subdirs: 3 files: 28
/boot/ size: 122M subdirs: 36 files: 1004
Чтобы иметь легкий доступ к этой команде, Вы могли превратить его в функцию. Добавьте эти строки к файлу инициализации своей оболочки (~/.bashrc
для удара):
dirsize(){
find "$1" -type d | while IFS= read -r dir; do
echo -ne "$dir\tsize: $(du -sh "$dir"| cut -f 1)"
echo -ne "\tsubdirs: $(find "$dir" -mindepth 1 -type d | wc -l)"
echo -e "\tfiles: $(find "$dir" -maxdepth 1 -type f | wc -l )";
done | tac
}
Можно теперь выполнить его как dirsize /path/
.
Функция выше имеет 5 больших частей:
find /path/to/target -type d | while IFS= read -r dir; do ... ; done
: Это найдет все каталоги под /path/to/target
и обработайте каждый из них путем установки переменной dir
к их имени. IFS=
гарантирует, что это не повредится на каталогах с пробелами на их имена.
echo -ne "$dir\tsize: $(du -sh "$dir" | cut -f 1)"
: Это использует команду du
получить размер каталога и cut
распечатать только первое поле du
.
echo -ne "\tsubdirs: $(find "$dir" -mindepth 1 -type d | wc -l)"
: Эта команда находки ищет подкаталоги $dir
. type -d
гарантирует, чтобы мы только нашли каталоги, никакие файлы и -mindepth
удостоверяется, что мы не считаем текущий каталог, .
.
echo -e "\tfiles: $(find "$dir" -maxdepth 1 -type f | wc -l)";
: Этот ищет файлы (-type f
) это непосредственно (-maxdepth 1
) под $dir
. Это не будет считать файлы, которые находятся в подкаталогах $d
.
| tac
: Наконец, через все это проходят tac
который просто инвертирует порядок, в котором печатаются строки. Это означает, что общий размер целевого каталога покажется последней строкой. Если это не то, что Вы хотите, просто удаляете | tac
.
Попытаться работать , systemctl состояние user@root.service
, для замены пользователя поддерживают пользователя, для запуска сервиса просто работает , systemctl запускают user@root.service
(если сервис деактивирован).
Вместо того, чтобы пытаться создать пользовательский системный сервис Systemd, я оказался введением
...
[Service]
...
User=1000
пользовательской директивы в файле Systemd, который, похоже, запускает службу как мой пользователь, и, таким образом, имеет тот же намеченный результат как пользовательский системный сервис.
Моя собственная система остается загадкой для меня.