精华内容
下载资源
问答
  • 这篇文章主要介绍了Linux系统中获取路径文件名的方法,文中总结出了两条,需要的朋友可以参考下代码如下:[root@http://www.doczj.com/doc/8b555ede52ea551811a6871e.html ]#basename /root/aaa/bbb/dabu.txt显示:...

    这篇文章主要介绍了Linux系统中获取路径的文件名的方法,文中总结出了两条,需要的朋友可以参考下

    代码如下:

    [root@http://www.doczj.com/doc/8b555ede52ea551811a6871e.html ]#basename /root/aaa/bbb/dabu.txt

    显示:

    代码如下:

    dabu.txt #获取路径的文件名

    shell脚本中如何获得脚本文件所在路径?

    方法一:

    代码如下:

    [root@http://www.doczj.com/doc/8b555ede52ea551811a6871e.html ]#DIR=$(cd $(dirname $0); pwd)

    [root@http://www.doczj.com/doc/8b555ede52ea551811a6871e.html ]#echo $DIR

    但是像这种dirname $0这种写法,在遇到source命令时会得到错误的结果。

    方法二:

    代码如下:

    [root@http://www.doczj.com/doc/8b555ede52ea551811a6871e.html ]#echo $( cd $( dirname ${BASH_SOURCE[0]} ) && pwd )

    上面一行命令可以获得脚本的绝对轮径,无论你在何处调用这个脚本。

    但是如果含有软链接,就无法使用了。所以,我们为了能正确解析指向脚本的软链接,可以使用下面的多行命令:

    代码如下:

    SOURCE=${BASH_SOURCE[0]}

    while [ -h $SOURCE ]; do # resolve $SOURCE until the file is no longer a symlink

    DIR=$( cd -P $( dirname $SOURCE ) && pwd )

    展开全文
  • 复制代码代码如下:[root@dabu.info ]#basename /root/aaa/bbb/dabu.txt显示:复制代码代码如下:dabu.txt #获取路径文件名shell脚本中如何获得脚本文件所在路径?方法一:复制代码代码如下:[root@dabu.info ]#DIR=$...

    复制代码代码如下:

    [root@dabu.info ]#basename /root/aaa/bbb/dabu.txt

    显示:

    复制代码代码如下:

    dabu.txt #获取路径的文件名

    shell脚本中如何获得脚本文件所在路径?

    方法一:

    复制代码代码如下:

    [root@dabu.info ]#DIR=$(cd "$(dirname "$0")"; pwd)

    [root@dabu.info ]#echo $DIR

    但是像这种dirname "$0"这种写法,在遇到source命令时会得到错误的结果。

    方法二:

    复制代码代码如下:

    [root@dabu.info ]#echo "$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

    上面一行命令可以获得脚本的绝对轮径,无论你在何处调用这个脚本。

    但是如果含有软链接,就无法使用了。所以,我们为了能正确解析指向脚本的软链接,可以使用下面的多行命令:

    复制代码代码如下:

    SOURCE="${BASH_SOURCE[0]}"

    while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink

    DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"

    SOURCE="$(readlink "$SOURCE")"

    [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located

    done

    DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"

    也可与source,bash -c命令使用

    但是,如果你在脚本中使用先cd切换到其他目录,在运行时上面的命令片段时,则上面的命令不能等到正确的结果。可以参考关于$CDPATH 陷阱的文章。想理解它如何其作用的,可以运行下面的代码:

    复制代码代码如下:

    #!/bin/bash

    SOURCE="${BASH_SOURCE[0]}"

    while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink

    TARGET="$(readlink "$SOURCE")"

    if [[ $SOURCE == /* ]]; then

    echo "SOURCE '$SOURCE' is an absolute symlink to '$TARGET'"

    SOURCE="$TARGET"

    else

    DIR="$( dirname "$SOURCE" )"

    echo "SOURCE '$SOURCE' is a relative symlink to '$TARGET' (relative to '$DIR')"

    SOURCE="$DIR/$TARGET" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located

    fi

    done

    echo "SOURCE is '$SOURCE'"

    RDIR="$( dirname "$SOURCE" )"

    DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"

    if [ "$DIR" != "$RDIR" ]; then

    echo "DIR '$RDIR' resolves to '$DIR'"

    fi

    echo "DIR is '$DIR'"

    展开全文
  • Linux服务器中,文件的全路径指的是包括目录和子目录在内的完整地址,使用这些...当手动处理一个文件路径时,很容易得到文件名,但如果你使用脚本来实现某种自动化,你可能需要在某些情况下提取文件名。让我们来...

    346a.png

    在Linux服务器中,文件的全路径指的是包括目录和子目录在内的完整地址,使用这些目录可以找到文件。每个操作系统都有不同的文件全路径的变体。

    在Linux服务器中,它通常看起来类似如下。

    /home/user/Documents/test.txt

    这是文件test.txt的完整文件路径。

    当手动处理一个文件路径时,很容易得到文件名,但如果你使用脚本来实现某种自动化,你可能需要在某些情况下提取文件名。

    让我们来看看如何在Linux中从完整路径中提取文件名。

    1、使用Basename命令

    basename命令的全部目的是为了从文件路径中检索文件名。虽然从一个完整的路径中获取文件名并不难,但basename会自动帮你完成,你不必再去解析文件路径等麻烦。

    语法是:

    $ basename full_file_path

    示例:

    $ basename /var/log/syslog

    使用-a参数来传递多个路径:

    $ basename -a /var/log/syslog /var/log/dpkg.log

    2、使用Bash参数替换

    Bash参数替换是一种动态修改变量的方法。要使用此方法,我们需要将文件路径存储在变量中。

    $ fullpath="/var/log/syslog"

    现在我们将应用参数替换并将其值存储在另一个变量中。

    $ filename=${fullpath##*/}

    $ echo $filename

    基本上,它的作用是:将‘/’“完整路径”中最后一个部分之前的部分剪切掉,只保留字符串的其余部分,也就是文件名。

    在这篇文章中,我们学习了两种在Linux中从一个完整的文件路径中获取文件名的方法。

    展开全文
  • 前言有个软件叫HLAreporter,它真的搞人,基本上就是...通常的操作是由路径中提取出文件名,从路径中提取出目录名,提取文件后缀名,相对路径转换为绝对路径等等。下面介绍几种方法进行相关的操作,这些我都使用过的...

    前言

    有个软件叫HLAreporter,它真的搞人,基本上就是shell脚本联合起来的,关键是居然还有各种小问题,其中之一就是关于文件名和目录名这个,导致程序只能在软件本身的目录运行,然后各种bug,于是我就修改了一部分,里面对文件名和目录名进行了处理。通常的操作是由路径中提取出文件名,从路径中提取出目录名,提取文件后缀名,相对路径转换为绝对路径等等。

    下面介绍几种方法进行相关的操作,这些我都使用过的。

    首先假设我的文件全称:/home/luna/Desktop/Software/softHLA/HLAreporter.v103/HLAreporter.sh.

    获取文件名

    使用${},${str##*/}

    这个命令的作用就是去掉变量str从左边算起的最后一个/字符及其左边的内容,返回的值是从左边算起的最后一个/(不含该字符)的右边的所有内容,例子很简单:

    str=/home/luna/Desktop/Software/softHLA/HLAreporter.v103/HLAreporter.sh

    file=${str##*/}

    echo $file

    HLAreporter.sh ## 运行结果

    使用awk语句

    因为在ubuntu下面,路径都是以/为隔开的,那么我们就以/为分隔符,然后把最后部分打印,赋值,例子如下:

    str=/home/luna/Desktop/Software/softHLA/HLAreporter.v103/HLAreporter.sh

    file=`echo $str | awk -F "/" '{print $NF}'`

    echo $file

    HLAreporter.sh

    使用官方函数basename

    bash shell本身提供了basename命令,可以直接获取路径名最后的文件名,实现代码如下:

    str=/home/luna/Desktop/Software/softHLA/HLAreporter.v103/HLAreporter.sh

    file=$(basename $str)

    echo $file

    HLAreporter.sh

    后缀和文件名分开

    使用${}

    在这里分别使用/和.作为分隔符来进行处理,代码如下:

    str=/home/luna/Desktop/Software/softHLA/HLAreporter.v103/HLAreporter.sh

    file=${str##*/}

    filename=${file%.*}

    suffix=${file##*.}

    echo $file, $filename, $suffix

    HLAreporter.sh, HLAreporter, sh

    str=/home/luna/Desktop/Software/softHLA/HLAreporter.v103.tar.gz

    file=${str##*/}

    filename=${file%%.*}

    suffix=${file#*.}

    echo $file, $filename, $suffix

    HLAreporter.v103.tar.gz, HLAreporter, v103.tar.gz

    用的是Shell的参数扩展(Parameter Extension)功能,解释如下:

    ${str##*/}: 从左边开始删除str中最大匹配(longest matching pattern) */ 的字符串

    ${str%/*}:从右边开始删除str中最小匹配(shortest matching pattern) /* 的字符串

    ${file##*.}:从左边开始删除file中最大匹配(longest matching pattern) *. 的字符串

    ${file%.*}:从右边开始删除file中最小匹配(shortest matching pattern) .* 的字符串

    ${file%%.*}:从右边开始删除file中最大匹配(longest matching pattern) .* 的字符串

    ${file#*.}:从左边开始删除file中小匹配(shortest matching pattern) *. 的字符串

    #:表示从左边算起第一个

    %:表示从右边算起第一个

    ##:表示从左边算起最后一个

    %%:表示从右边算起最后一个

    换句话来说,#总是表示左边算起,%总是表示右边算起。

    参数扩展有多种形式,在shell编程中可以用作参数的拼接,字符串的替换,参数列表截取,变量初值等操作,这里不再详述,请参考右边的功能列表和官方文档.

    参数扩展功能列表

    参数形式

    扩展后

    x{y,z}

    xy xz

    ${x}{y, z}

    math?formula=%7Bx%7Dy{x}z

    math?formula=%7Bx%7D%7By%2Cz}

    math?formula=%7Bx%7Dy{x}${z}

    ${param#pattern}

    从param前面删除pattern的最小匹配

    ${param##pattern}

    从param前面删除pattern的最大匹配

    ${param%pattern}

    从param后面删除pattern的最小匹配

    ${param%%pattern}

    从param后面删除pattern的最大匹配

    ${param/pattern/string}

    从param中用string替换pattern的第一次匹配,string可为空

    ${param//pattern/string}

    从param中用string替换pattern的所有匹配,string可为空

    ${param:3:2}

    截取$param中索引3开始的2个字符

    ${param:3}

    截取$param中索引3至末尾的字符

    ${@:3:2}

    截取参数列表$@中第3个开始的2个参数

    ${param:-word}

    math?formula=param%E4%B8%BA%E7%A9%BA%E6%88%96%E6%9C%AA%E8%AE%BE%E7%BD%AE%EF%BC%8C%E5%88%99%E5%8F%82%E6%95%B0%E5%BC%8F%E8%BF%94%E5%9B%9Eword%EF%BC%8Cparam不变

    ${param:+word}

    math?formula=param%E4%B8%BA%E9%9D%9E%E7%A9%BA%EF%BC%8C%E5%88%99%E5%8F%82%E6%95%B0%E5%BC%8F%E8%BF%94%E5%9B%9Eword%EF%BC%8Cparam不变

    ${param:=word}

    math?formula=param%E4%B8%BA%E7%A9%BA%E6%88%96%E4%B8%BA%E8%AE%BE%E7%BD%AE%EF%BC%8C%E5%88%99%E5%8F%82%E6%95%B0%E5%BC%8F%E8%BF%94%E5%9B%9Eword%EF%BC%8C%E5%90%8C%E6%97%B6param设置为word

    ${param:?message}

    若$param为空或为设置,则输出错误信息message,若包含空白符,则需引号

    获取路径名

    使用${},${str%/*}

    去掉变量var从右边算起的第一个'/'字符及其右边的内容,返回从右边算起的第一个'/'(不含该字符)的左边的内容。使用例子及结果如下:

    str=/home/luna/Desktop/Software/softHLA/HLAreporter.v103/HLAreporter.sh

    path=${str%/*}

    echo $path

    /home/luna/Desktop/Software/softHLA/HLAreporter.v103

    使用awk语句

    分隔符,混合正则表达式:

    str=/home/luna/Desktop/Software/softHLA/HLAreporter.v103/HLAreporter.sh

    path=`echo $str | awk -F '/[^/]*$' '{print $1}'`

    echo $path

    /home/luna/Desktop/Software/softHLA/HLAreporter.v103

    ## 或者使用for循环

    path=`echo $str | awk 'BEGIN{res=""; FS="/";}{ for(i=2;i<=NF-1;i++) res=(res"/"$i);} END{print res}'`

    /home/luna/Desktop/Software/softHLA/HLAreporter.v103

    使用官方函数dirname

    bash shell本身提供了basename命令,可以直接获取路径名最后的文件名,实现代码如下:

    str=/home/luna/Desktop/Software/softHLA/HLAreporter.v103/HLAreporter.sh

    path=$(dirname $str)

    echo $path

    /home/luna/Desktop/Software/softHLA/HLAreporter.v103

    获取文件夹下的文件名

    str=/home/luna/Desktop/Software/softHLA/HLAreporter.v103

    if [ -d "$str" ]; then

    for file in $(ls $str/)

    do

    echo $file

    done

    fi

    HLAfreq.sh

    HLAreporter.README

    HLAreporter.sh

    HLAreporter_manual

    Hydra-Version-0.5.3

    Init.sh

    bam2fastq-1.1.0

    bin

    database

    docs

    freq

    mytest

    qualityprofile

    results

    samtools

    ssake_v3-8-tar

    temp

    相对路径转换为绝对路径

    对于 Linux 系统,绝对路径和相对路径的判断十分简单:是否以斜线开头;

    绝对路径以 / 开头;

    相对路径不以 / 开头;

    script=../../../HLAreporter.sh

    dir=$(cd $(dirname $script); pwd)

    or

    dir=`cd $(dirname $script); pwd`

    or

    dir=echo `cd $(dirname $script); pwd`

    echo $dir

    /home/luna/Desktop/Software/softHLA/HLAreporter.v103

    参考

    —— dulunar 后记于 2019.11

    展开全文
  • 文章目录一、文件夹路径获取1.1 头文件1.2 函数原型1.2.1 getcwd() 一、文件夹路径获取 1.1 头文件 #include <unistd.h> // Linux系统中 #include <direct.h> // windows系统中 1.2 函数原型 1.2.1 ...
  • 假设一个文件的路径名为:“/home/Project/Myjob/hello.txt”,并且路径文件名都不是固定的。如何获得hello.txt这段字符串呢?数组1、使用basename()函数import os.pathfilePath=“/home/Project/Myjob/hello.txt...
  • 1. 获取文件名:basenameshell本身提供了获取文件名的命令:basename,该命令可以从路径中提取出文件名(带后缀)。举个栗子:#/bin/bashFile=/dir1/dir2/dir3/a.b.c.txtbasename $File执行的结果为:a.b.c.txt上面的...
  • -type f -name "*.c"`doecho $ibasename $i 获取*.c文件名dirname $i 获取*.c对应的目录名done2、实际应用diff Linux源码,并将有不一样的源码整理在一起,要求:文件名以new和old区分。(1)、简单测试rm -rf ~/...
  • C++获取目录下文件名(Windows/Linux下) Linux获取目录下文件名 在编码解决这个问题之前,先介绍下DIR,dirent,stat等结构体。 DIR结构体 DIR结构体胡定义如下: struct __dirstream { void *__fd; char *__data...
  • 如何在Linux中提取路径文件名的特定部分所以我有几个目录,如:B01,B02,B03等,在每个目录的文件名如img01.23495.png,img01.3596596.png,img02.2399495.png等我必须将b01的img01重命名为其他标识符。...
  • 使用 dirname 命令获取路径名的目录部分在 Linux 中,可以使用 dirname 命令获取路径名的目录部分,不包含路径名最后的文件名。查看 man dirname 的说明如下:dirname [OPTION] NAME...dirname - strip last ...
  • 路径字符串中截取盘符、文件名、后缀名等信息》中总结了在批处理文件中,也就是Windows环境下怎样从路径字符串中截取文件名、盘符等信息,利用的是Windows的扩展变量,而这种截取路径的需求在linux脚本中也很常见...
  • 其实,获取文件名或者是目录名,一般的用途是在写程序时进行判断。 下面我们简单以几欢迎进入IT技术社区论坛,与200万技术人员互动交流 >>进入完整的文件名最长可以到达4096个字符。那么,怎么知道哪...
  • 前言有个软件叫HLAreporter,它真的搞人,基本上就是...通常的操作是由路径中提取出文件名,从路径中提取出目录名,提取文件后缀名,相对路径转换为绝对路径等等。下面介绍几种方法进行相关的操作,这些我都使用过的...
  • 文件查看方式 cat /usr/include/linux/limits.h 命令查看方式 文件名最大长度限制 getconf NAME_MAX /usr 路径最大长度限制 getconf PATH_MAX /usr
  • 我有以下问题. 我正在做一个grep: $command = grep -r -i –include = * .cfg’host {‘/ tomd...您可能也对dirname感兴趣,只能获取路径. 标签:bash,linux,grep 来源: https://codeday.me/bug/20191008/1871414.html
  • 所以很有必要获得当前可执行文件的绝对路径,然后再找到资源文件的路径。在Windows下,可以用GetModuleFileName来获得当前可执行文件的名字,但是Linux下这个情况就变的比较复杂。首先,我没有发现类似的函数,只能...
  • 基于给定的文件绝对路径获取文件所在的目录、完整文件名、不带后缀的文件名、文件类型(即文件后缀)。 2. 示例 假设给定的文件绝对路径是:C:/Users/Public/yellow.jpg,那么程序的运行结果应该是是: 文件所在...
  • 最近需要实现自动化搜寻特定文件夹下的特定文件,并且需要分别保存文件路径文件名。算然使用python的walk能够实现,但是感觉复杂了些。于是想看看linux自带的命令是否能完成这项工作。环境需要查找的目录结构如下 ...
  • 很多时候在使用Linux的shell时,我们都需要对文件名或目录名进行处理,通常的操作是由路径中提取出文件名,从路径中提取出目录名,提取文件后缀名等等。例如,从路径/dir1/dir2/file.txt中提取也文件名file.txt,...
  • Linux获取文件夹下所有文件名及其相对地址 darknet批量测试数据需要从获取测试集中所有的文件名(即.jpg图片文件)用于后续批量测试时使用,故写得一下脚本文件: # 举个栗子,该脚本文件叫get_filename.sh #!/bin...
  • Linux 驱动根据struct file获取路径文件名 一、背景 在对内核vfs层函数进行hook的时候,需要对struct pt_regs相关数据进行处理,插桩vfs_read/vfs_write时需要得到被读写文件的全路径或者文件名。 二、代码实现 ...
  • 内核编程中,操作的对象往往是inode,但是如何根据inode得到文件名呢,或者找到对应于文件系统的位置呢?527 struct inode {528 umode_t i_mode;529 unsigned short i_opflags;530 kuid_t i_u...
  • 使用 dirname 命令获取路径名的目录部分在 Linux 中,可以使用 dirname 命令获取路径名的目录部分,不包含路径名最后的文件名。查看 man dirname 的说明如下:dirname [OPTION] NAME…dirname – strip last ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 105,381
精华内容 42,152
关键字:

linux获取路径文件名

linux 订阅