精华内容
下载资源
问答
  • https://www.dyxmq.cn/program/code/c-cpp/linux-c-dirname-and-basename.html 头文件:libgen.h char *dirname(char *path); char *basename(char *path); char *path="/dir1/dir2/dir.suffix...linux 也内置了这两个

    https://www.dyxmq.cn/program/code/c-cpp/linux-c-dirname-and-basename.html

    头文件:libgen.h

    char *dirname(char *path);
    char *basename(char *path);

    char *path="/dir1/dir2/dir.suffix";
    dirname(path) ==> /dir1/dir2
    basename(path) ==> dir.suffix

    linux 也内置了这两个命令

    展开全文
  • Linux shell中提取文件名路径

    千次阅读 2020-09-01 10:24:17
    通常的操作是由路径中提取出文件名,从路径中提取出目录名,提取文件后缀名,相对路径转换为绝对路径等等。 下面介绍几种方法进行相关的操作,这些我都使用过的。 首先假设我的文件全称:/home/luna/Desktop/...

    前言

    有个软件叫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}${x}y ${x}z
    ${x}{y, $z}${x}y x {x} 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} p a r a m 为 空 或 未 设 置 , 则 参 数 式 返 回 w o r d , param为空或未设置,则参数式返回word, paramwordparam不变
    ${param:+word} p a r a m 为 非 空 , 则 参 数 式 返 回 w o r d , param为非空,则参数式返回word, paramwordparam不变
    ${param:=word} p a r a m 为 空 或 为 设 置 , 则 参 数 式 返 回 w o r d , 同 时 param为空或为设置,则参数式返回word,同时 paramwordparam设置为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
    

    参考

    Shell 截取文件名和后缀

    Linux shell 之 提取文件名和目录名的一些方法

    Perl4::CoreLibs

    展开全文
  • linux bash路径How to get the directory path and file name from a absolute path in Bash on Linux? For example, with “/foo/bar/baz.txt”, it will produce: “/foo/bar/” and “baz.txt”. 如何在Linux上的...

    linux bash路径

    How to get the directory path and file name from a absolute path in Bash on Linux? For example, with “/foo/bar/baz.txt”, it will produce: “/foo/bar/” and “baz.txt”.

    如何在Linux上的 Bash中从绝对路径获取目录路径和文件名? 例如,使用“ /foo/bar/baz.txt”,它将产生:“ / foo / bar /”和“ baz.txt”。

    You also have the basename and dirname commands besides of the basename and dirname C API in Linux:

    除了Linux中的 C API的basenamedirname外,您还具有basenamedirname命令:

    [zma@laptop:~]$ p="/foo/bar/baz.txt"
    [zma@laptop:~]$ dirname $p
    /foo/bar
    [zma@laptop:~]$ basename $p
    baz.txt
    
    Answered by Eric Z Ma.
    埃里克·马(Eric Z Ma)回答。

    翻译自: https://www.systutorials.com/how-to-get-the-directory-path-and-file-name-from-a-absolute-path-in-bash-on-linux/

    linux bash路径

    展开全文
  • linux c下,从路径名中分离文件名

    千次阅读 2017-12-15 11:06:44
    //上句假设以某种方式获得的全文件名在pathname中,"..."中只是举例 strcpy(fn,(p=strrchr(pathname,'\\')) ? p+1 : pathname); //上句函数第2实参这样写以防止文件在当前目录下时因p=NULL而出错 printf("%s\n",...

    首先介绍一些查找字符的函数

    1、strrchr

    头文件:#include <string.h>

    strrchr() 函数用于查找某字符在字符串中最后一次出现的位置,其原型为:
        char * strrchr(const char *str, int c);

    【参数】str 为要查找的字符串,c 为要查找的字符。

    strrchr() 将会找出 str 字符串中最后一次出现的字符 c 的地址,然后将该地址返回。

    注意:字符串 str 的结束标志 NUL 也会被纳入检索范围,所以 str 的组后一个字符也可以被定位。

    【返回值】如果找到就返回该字符最后一次出现的位置,否则返回 NULL。

    返回的地址是字符串在内存中随机分配的地址再加上你所搜索的字符在字符串位置。设字符在字符串中首次出现的位置为 i,那么返回的地址可以理解为 str + i。

    2、strchr

    头文件:#include <string.h>

    strchr() 用来查找某字符在字符串中首次出现的位置,其原型为:
        char * strchr (const char *str, int c);

    【参数】str 为要查找的字符串,c 为要查找的字符。

    strchr() 将会找出 str 字符串中第一次出现的字符 c 的地址,然后将该地址返回。

    注意:字符串 str 的结束标志 NUL 也会被纳入检索范围,所以 str 的组后一个字符也可以被定位。

    【返回值】如果找到指定的字符则返回该字符所在地址,否则返回 NULL。

    返回的地址是字符串在内存中随机分配的地址再加上你所搜索的字符在字符串位置。设字符在字符串中首次出现的位置为 i,那么返回的地址可以理解为 str + i。

    提示:如果希望查找某字符在字符串中最后一次出现的位置,可以使用 strrchr() 函数。


    3、strstr

    头文件:#include <string.h>

    strstr()函数用来检索子串在字符串中首次出现的位置,其原型为:
        char *strstr( char *str, char * substr );

    【参数说明】str为要检索的字符串,substr为要检索的子串。

    【返回值】返回字符串str中第一次出现子串substr的地址;如果没有检索到子串,则返回NULL。



    例子1:

    #include<string.h>
    #include<stdio.h>
    char *find_file_name(const char *name)
    {
    	char *name_start = NULL;
    	int sep = '/';
    	if (NULL == name) {
    			printf("the path name is NULL\n");
    	    return NULL;
    	}
    	name_start = strrchr(name, sep);
    
    	return (NULL == name_start)?name:(name_start + 1);
    }
    int main(void)
    {
    	char string[15],mypath[66]={0};
    	char*ptr,c='r';
    	char filepath[]="/home/linux_c/hello.c";
    	strcpy(string,"Thisisastring");
    	ptr=strchr(string,c);
    	if(ptr)
    		printf("The character %c is at position:%d\n",c,ptr-string+1);
    	else
    		printf("The character was not found\n");
    	
    	
    	
    	printf("\n\n filename is %s \n\n",find_file_name(filepath));
    	return 0;
    }


    例子2:

    //windows下路径测试
    #include "stdio.h"
    #include "string.h"
    int main(void){
        char fn[30],*p;
        char pathname[80]="e:\\1\\2\\abc.dat";
              //上句假设以某种方式获得的全文件名在pathname中,"..."中只是举例
        strcpy(fn,(p=strrchr(pathname,'\\')) ? p+1 : pathname);
              //上句函数第2实参这样写以防止文件在当前目录下时因p=NULL而出错
        printf("%s\n",fn);//打出来看看
        return 0;
    }




    参考:http://c.biancheng.net/cpp/u/string_h/


    展开全文
  • Linux截取路径中的文件名并去后缀

    千次阅读 2018-08-17 16:58:59
    假设一个文件的路径名为:“/home/Project/Myjob/hello.txt”,而且路径文件名都不是固定的。如何得到hello.txt这段字符串呢? 一、使用basename()函数 import os.path  filePath=“/home/Project/Myjob/...
  • linux中从路径中提取文件名或目录名

    千次阅读 2018-01-13 10:33:57
    $ var=/dir1/dir2/file.txt $ echo ${var##*/} $ file.txt 参考博客:http://blog.csdn.net/ljianhui/article/details/43128465 
  • 文章目录一、文件夹路径... // Linux系统中 #include <direct.h> // windows系统中 1.2 函数原型 1.2.1 getcwd() char* getcwd(char buf, size_t size); 返回值是char *的路径 参数 buf: 返回的缓冲区 ...
  • linux c++获取路径中的文件名

    千次阅读 2014-06-26 15:37:00
    #include #include void getName(char* full_name,char * dest); int main(int argc,char*argv[]) {  char * path="./zxc/chinamobile/20140623.wav";  char result[256]={'\0'};... getN
  • 本篇文章主要介绍了Linux shell 之 提取文件名和目录名的一些方法总结,具有一定的参考价值,有兴趣的可以了解一下。
  • 用python从文件路径获取文件名用python从文件路径获取文件名用python从文件路径获取文件名 print(os.path.split(train_mask)[1].split(".")[0])
  • linux下的文件名路径的长度限制

    千次阅读 2017-09-30 09:08:43
    这个字符串的空间应该是根据实际需要malloc的空间,如果实际应用中是自己拼凑的有格式的文件名,那么大概可以预知大小,要是无法预知,就先事先知道linux系统对文件名路径的长度限制。  获得方式为:  由于...
  • 如何使用grep在Linux显示文件名

    千次阅读 2020-04-05 13:43:21
    How can I use grep to show just file-names (no in-line matches) on Linux? 如何在Linux上使用grep来显示文件名(没有内
  • linux根据文件名查找文件路径

    千次阅读 2020-11-30 13:21:20
    以查找“dubbo-consumer.xml”为例 方法一:当前文件夹下操作 find ./ -name dubbo-consumer.xml 结果: 方法二:未知准确文件夹查找 find /home/ct/ -name dubbo-consumer.xml 结果:
  • Linux路径名和文件名最大长度限制

    千次阅读 2017-09-07 13:38:00
    UNIX标准对路径名和文件名最大长度限制做出了说明,但其上限值在实际应用长过小,Linux在具体实现时提升了该上限,该限制在Linux的 /usr/include/linux/limits.h 中做出了说明,具体如下: 1 #ifndef _LINUX_...
  • 路径字符串中截取盘符、文件名、后缀名等信息》中总结了在批处理文件中,也就是Windows环境下怎样从路径字符串中截取文件名、盘符等信息,利用的是Windows的扩展变量,而这种截取路径的需求在linux脚本中也很常见...
  • Linux系统中获取路径文件名的方法.docx
  • linux查看目录下所有文件名文件名不包含扩展名,全路径名等; linux for 循环的使用等
  • 获取指定目录下所有文件的绝对路径文件名
  • linux通过文件名快速查找文件路径

    千次阅读 2019-09-29 20:13:21
    locate fileName
  • Linux 文件名路径的最大长度

    万次阅读 2017-06-28 12:53:06
    在x86_64 Linux下,文件名的最大长度是255个字节,文件路径的最大长度是4096bytes, 即可以包含16级的最大文件长度的路径。在#define NAME_MAX 255的定义.
  • 主要介绍了Linux shell 提取文件名和目录名的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 示例代码首先根据文件名获取文件描述符,然后根据文件描述符获得文件绝对路径文件名),如果已知文件描述符fd,可直接通过下面两条代码获得文件绝对路径文件名): snprintf(buf,sizeof(buf), "/proc/self/fd/...
  • Linux 驱动根据struct file获取全路径文件名 一、背景 在对内核vfs层函数进行hook的时候,需要对struct pt_regs相关数据进行处理,插桩vfs_read/vfs_write时需要得到被读写文件的全路径或者文件名。 二、代码实现 ...
  • shell本身提供了获取文件名的命令:basename,该命令可以从路径中提取出文件名(带后缀)。 举个栗子: #/bin/bash File=/dir1/dir2/dir3/a.b.c.txt basename $File 执行的结果为: a.b.c.txt 上面的栗子...
  • 问题:linux系统中文件名包含中文,导致页面访问不了文件。就是上条博客中的解决方法二遗留问题。 文件名中有以下格式:TC2_诺而达铜管(中山)有限公司.pdf ,要改为TC2.pdf,去掉中文部分 1、先了解linux 获取...
  • linux find 只获取文件名而去除路径

    千次阅读 2017-09-06 15:43:00
    find /var/process_log/ -name '*.log' -exec basename {} \; 转载于:https://www.cnblogs.com/hzijone/p/7485127.html
  • 在/apps/swapping 目录下 查找 文件名为 '包含swapping的并且以.java结尾的文件名' 返回结果如下: 现在需求,仅返回文件名就可以 在命令最后加上 find .......... |sed 's#.*/##' 如下,完整的...
  • 经常碰到这样的需求,需要知道执行程序的路径和程序名,该怎么办呢?linux中有两个命令: dirname 获得文件所在目录名称 basename 获得文件路径中的文件名

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 253,234
精华内容 101,293
关键字:

linux显示路径加文件名

linux 订阅