Readlink - Как обрезать полный путь?

Я использую readlink чтобы найти полный путь к файлу:

  cek=$(readlink -f "$1")
  mkdir -p  "$ydk$cek"
  mv "$1" "$ydk/$cek/$ydkfile"  

Но readlink -f "$1" дает мне полный путь. Как я могу обрезать полный путь?

Например:

  /home/test/test/2014/10/13/log.file

Но мне нужно просто

  /test/2014/10/13/

Как мне это сделать?


Судя по многочисленным комментариям:

  • Выходными данными должны быть последние четыре компонента каталога полного пути, возвращаемого readlink,

Дано:

full_path=/home/some/where/hidden/test/2014/08/29/sparefile.log

вывод должен быть:

test/2014/08/29

(Не включайте никаких предположений о сегодняшней дате в код обрезки пути.)

2 ответа

Решение

Если вам нужны последние четыре компонента каталога полного пути, и если у вас нет новых строк в полном пути, и если у вас есть GNU grep или BSD (Mac OS X) grep с поддержкой -o (выводить только соответствующий материал), тогда это дает требуемый результат:

$ cek="/home/test/test/2014/10/13/log.file"
$ echo "${cek%/*}"
/home/test/test/2014/10/13
$ echo "${cek%/*}" | grep -o -E -e '(/[^/]+){4}$'
/test/2014/10/13
$ full_path=/home/some/where/hidden/test/2014/08/29/sparefile.log
$ echo "${full_path%/*}" | grep -o -E -e '(/[^/]+){4}$'
/test/2014/08/29
$

Мне нужно начать путь /201[0-9]:

/home/bla/bla2/bla3/2014/01/13/13…/2014/01/13/13…,

Итак, вам нужно использовать grep -o опять же, начиная с года:

echo "${fullpath%/*}" | grep -o -e '/201[0-9]/.*$'

Это намного проще; вам даже не нужны расширенные регулярные выражения для этого!

Если вам нужен элемент path до года, то вам нужно:

echo "{fullpath%/*}" | grep -o -e '/[^/][^/]*/201[0-9]/.*$'

Вам действительно нужно удалить "/home"?

cek="/home/test/test/2014/10/13/log.file"
dir=$(dirname "$cek")
echo "${dir#/home}"
/test/test/2014/10/13

Всего 4 последних компонента каталога:

last4dirs() { 
    local IFS=/
    local -a components=($1)
    local l=${#components[@]}
    echo "${components[*]:l-5:4}"
}
last4dirs /home/some/where/hidden/test/2014/08/29/sparefile.log
test/2014/08/29
Другие вопросы по тегам