Необходимо удалить корневой каталог из пути к файлу

Мне нужно удалить корневой каталог из пути к файлу. Ниже приведен пример для того же,

path1=/tmp/errorlog_invest_12345_88_1:05:45.txt

Выход:

Корневой каталог здесь /tmp/

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

Пожалуйста, помогите мне в этом. Спасибо!


person user2987894    schedule 08.01.2016    source источник
comment
Под корневым каталогом вы имеете в виду только первый каталог в пути? То есть для ввода /a/b/file.txt что бы вы хотели получить? б/файл.txt или файл.txt?   -  person Mureinik    schedule 08.01.2016
comment
Вы хотите сделать это на Linux, Mac, Windows...?   -  person Tiago Engel    schedule 08.01.2016
comment
Спасибо. Корневой каталог для данного ввода - /a/b/, этот файл.txt может быть любым, это полностью зависит от пользователя, который вводит ввод.   -  person user2987894    schedule 08.01.2016
comment
Я хочу сделать это в линуксе. Пожалуйста, помогите мне в этом   -  person user2987894    schedule 08.01.2016
comment
Означает ли это, что вы хотите получить только имя файла? Если да, используйте basename: name=$(basename /tmp/whatever/some_file.txt)   -  person Bernhard    schedule 08.01.2016


Ответы (2)


Судя по вашей строке, вы, вероятно, используете bash.

Вы можете отделить «корень» от пути с помощью команды dirname -. Пример:

имя каталога /tmp/errorlog_invest_12345_88_1:05:45.txt

Это должно напечатать: tmp ... как результат.

person DocWeird    schedule 08.01.2016
comment
Однако эта команда выводит полный путь к каталогу, а не только фактический каталог корневого уровня. Т.е. если путь будет /tmp/files/somefile.txt, то результатом будет: /tmp/files - person DocWeird; 08.01.2016

Это то, что вы хотите?

$ path1=/tmp/errorlog_invest_12345_88_1:05:45.txt
$ file=${path1##*/}
$ echo $file
errorlog_invest_12345_88_1:05:45.txt
$ dir=${path1%/$file}
$ echo $dir
/tmp
person Jens    schedule 08.01.2016