Если вы работаете с именами файлов конкретно, dirname
и basename
являются инструментами для работы:
pax$ dirname /dir1/dir2/dir3/file
/dir1/dir2/dir3
pax$ basename /dir1/dir2/dir3/file
file
Для произвольных разделителей вы можете использовать sed
:
pax$ echo /dir1/dir2/dir3/file | sed 's?/[^/]*$??'
/dir1/dir2/dir3
pax$ echo /dir1/dir2/dir3/file | sed 's?^.*/??'
file
Первая заменяет последовательность «косая черта, за которой следует ноль или более не косых черт до конца строки» (/file
), на ничто. Второй заменяет все от начала строки до последней косой черты (/dir1/dir2/dir3/
) ничем.
Если вы хотите, чтобы вывод этих команд был назначен переменным, вы можете использовать $()
:
pax$ filespec=$(basename /dir1/dir2/dir3/file) ; echo $filespec
file