Путем проб и ошибок, черпая вдохновение из bash time с nohup , я пришел к следующему:
$ nohup bash -c 'time./main &> /dev/null' > runtime.out &
[1] 23178
nohup: ignoring input and redirecting stderr to stdout
$
[1]+ Done nohup bash -c 'time./main &> /dev/null' > runtime.out
$ cat runtime.out
real 0m0.004s
user 0m0.002s
sys 0m0.002s
Это перенаправит stdout
из time
на runtime.out
, распечатает stdout
из nohup
на терминал и перенаправит stdout
и stderr
из main
на /dev/null
.
Вы можете попробовать команду find
:
find /my/path -maxdepth 1 -type d -printf "%u %g " -exec du -h --max-depth=0 {} \;
должен найти все каталоги (фильтр-type d
)на один уровень ниже начальной точки/my/path
(опция-maxdepth 1
). Тогда будет
-printf
для печати владельца и группы, а затем du --max-depth=0
для каждого найденного каталога ({}
), чтобы напечатать имя и общий размер сразу после вывода предыдущей опции -printf
, используя механизм -exec
. У меня есть для вас простой фрагмент
#!/usr/bin/env bash
unset fname owner size i
for f in "$@"
do
fname[i]="$f"
owner[i]=$(stat -c %U "$f")
size[i++]=$(stat -c %s "$f")
done
for i in "${!fname[@]}"
do
printf "User %s owns %s and the size is %d Kbytes\n" "${owner[i]}" "${fname[i]}" $((${size[i]} / 1024))
done
Сделайте скрипт исполняемым или запустите его какbash script_name [path]
chmod u+x script_name
И запустить его
./script_name /my/path/*