首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Readlink -如何裁剪完整的路径?

Readlink -如何裁剪完整的路径?
EN

Stack Overflow用户
提问于 2014-10-13 14:00:38
回答 2查看 954关注 0票数 0

我使用readlink查找文件的完整路径:

代码语言:javascript
复制
  cek=$(readlink -f "$1")
  mkdir -p  "$ydk$cek"
  mv "$1" "$ydk/$cek/$ydkfile"  

readlink -f "$1"给了我一条完整的道路。我怎么才能剪出完整的路径呢?

例如:

代码语言:javascript
复制
  /home/test/test/2014/10/13/log.file

但我需要

代码语言:javascript
复制
  /test/2014/10/13/

我该怎么做呢?

从多个评论来看:

  • 输出应该是readlink返回的完整路径的最后四个目录组件。

给予:

代码语言:javascript
复制
full_path=/home/some/where/hidden/test/2014/08/29/sparefile.log

产出应是:

代码语言:javascript
复制
test/2014/08/29

(不要在路径修整代码中构建任何关于今天日期的假设。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-13 14:36:37

如果您需要完整路径的最后四个目录组件,并且在完整路径中没有换行符,如果您拥有支持grep的GNU grep或BSD (Mac OS X) grep(仅输出匹配的材料),那么这将提供所需的结果:

代码语言:javascript
复制
$ 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,从年份模式开始:

代码语言:javascript
复制
echo "${fullpath%/*}" | grep -o -e '/201[0-9]/.*$'

这要简单得多;您甚至不需要扩展正则表达式!

如果在一年前也需要path元素,那么需要:

代码语言:javascript
复制
echo "{fullpath%/*}" | grep -o -e '/[^/][^/]*/201[0-9]/.*$'
票数 4
EN

Stack Overflow用户

发布于 2014-10-13 14:06:15

你真的需要删除"/home“吗?

代码语言:javascript
复制
cek="/home/test/test/2014/10/13/log.file"
dir=$(dirname "$cek")
echo "${dir#/home}"
代码语言:javascript
复制
/test/test/2014/10/13

仅最后4个目录组件:

代码语言:javascript
复制
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
代码语言:javascript
复制
test/2014/08/29
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26341845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档