Идентификатор sid (идентификатор сеанса) должен быть согласованным.
Когда bash запускает команду, он обычно присваивает PGID первому процессу. Если это конвейер, все передаваемые по конвейеру команды имеют тот же PGID, что и первый процесс.
Вы уже упоминали cut
. Вы просто устанавливаете разделитель на /
. Несколько неинтуитивная часть заключается в том, что вам нужны поля 1 -5, потому что часть перед первым /
также считается (пустым )полем.
echo /1/2/3/4/5/6/7 | cut -d/ -f1-5
Результат
/1/2/3/4
Попробуйте это,
find /path/to/dir -mindepth 4 -type d | cut -d"/" -f -5 | sort -u
type -d
будет печатать только каталоги. mindepth
напечатает каталоги, в которых есть минимум 4 подкаталога. -d"/"
используйте /
в качестве разделителя для вырезания -f -5
вырезать все из пятой колонки sort -u
распечатает отсортированные уникальные пути к папкам. Возможно, вы захотите рассмотреть (double )«расширение параметра :Удалить соответствующий шаблон префикса/суффикса»:
$ path=/home/[username]/public_html/[prjectname]/abc/xyz
$ echo "${path%"${path#/*/*/*/*/}"}"
/home/[username]/public_html/[prjectname]/
Внешняя команда не требуется.