如何轻松快速提升网站流量?

使用 basename 命令(推荐)

功能:从完整路径中提取文件名(含扩展名)或移除扩展名。
语法

basename [路径] [后缀]  # 后缀用于移除扩展名

示例

  1. 提取文件名(含扩展名)

    basename /home/user/docs/report.txt  # 输出:report.txt
  2. 移除扩展名

    basename /home/user/docs/report.txt .txt  # 输出:report
  3. 批量处理文件(结合循环)

    for file in /path/*.jpg; do
      name=$(basename "$file" .jpg)
      echo "文件名: $name"
    done

使用Shell参数扩展

适用场景:在Shell脚本中直接操作变量,无需调用外部命令。

语法

${变量##*/}    # 从路径提取文件名(含扩展名)
${变量%.*}     # 移除扩展名
${变量%%.*}    # 移除多重扩展名(如.tar.gz)

示例

file_path="/var/log/apache2/error.log"
echo "${file_path##*/}"   # 输出:error.log
echo "${file_path%.*}"    # 输出:/var/log/apache2/error
echo "${file_path##*.}"   # 输出:log(仅提取扩展名)

使用 awk 命令

适用场景:处理复杂路径或批量文本提取。

示例

  1. 从路径提取文件名

    echo "/tmp/data/file.csv" | awk -F/ '{print $NF}'  # 输出:file.csv
  2. 提取文件名(不含扩展名)

    echo "/tmp/data/file.csv" | awk -F/ '{sub(/\..*/, "", $NF); print $NF}'
    # 输出:file

使用 find + -printf 选项

适用场景:递归搜索文件并直接输出文件名。

示例

find /home/user/docs -type f -printf "%f\n"  # %f 表示仅打印文件名# report.txt
# image.png

使用 ls 结合管道(谨慎使用)

注意ls 解析文件名可能遇到空格或特殊字符问题,建议仅在简单场景使用。

ls /path | awk '{print $1}'  # 列出文件名(第一列)

常见问题解答

  1. 如何提取目录名?
    使用 dirname 命令:

    dirname /home/user/docs/report.txt  # 输出:/home/user/docs
  2. 如何处理带空格的文件名?
    所有命令中变量用双引号包裹:

    basename "/path/My Document.txt"  # 正确
  3. 如何提取多个扩展名(如 .tar.gz)?
    使用双重参数扩展:

    file="archive.tar.gz"
    echo "${file%.*}"      # 输出:archive.tar
    echo "${file%%.*}"     # 输出:archive

总结建议

  • 简单提取 → 用 basename
  • 脚本内操作 → 用 参数扩展
  • 批量处理 → 结合 find 或循环
  • 避免解析错误 → 始终用引号包裹变量

引用说明基于 GNU Coreutils 文档(basename, dirname)、Bash 手册(参数扩展)及 Linux 命令行工具标准实现,实践环境为 Ubuntu 22.04,所有命令均通过验证。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/7952.html

(0)
酷番叔酷番叔
上一篇 2025年7月19日 13:01
下一篇 2025年7月19日 13:13

相关推荐

  • 如何在linux部署代码

    Linux 部署代码可先配置好环境,如安装依赖软件等,再通过版本控制

    2025年8月13日
    11000
  • 终端模拟器选哪款最顺手?

    在Linux图形界面中输入命令是许多用户(尤其是新手)的常见需求,虽然图形界面(GUI)提供了直观的操作方式,但命令行(CLI)在高效管理、脚本执行或高级任务中不可或缺,以下是几种主流方法,适用于Ubuntu、Fedora、Debian等常见发行版:终端模拟器是图形界面下的命令行工具窗口,所有操作均在此执行,打……

    2025年7月17日
    10800
  • Linux下如何查看线程?有哪些常用命令与方法?

    在Linux系统中,线程是进程内的执行单元,共享进程的资源(如内存、文件描述符等),但拥有独立的栈和寄存器状态,查看线程信息对于调试多程序性能分析、排查死锁或资源竞争问题至关重要,本文将详细介绍Linux下查看线程的多种方法,涵盖基础命令、高级工具及实际应用场景,基础命令:ps查看线程ps(Process St……

    2025年9月8日
    10700
  • Ubuntu还是Debian?哪个更合适你的需求

    在Linux系统中,Telnet是一种基于TCP/IP协议的远程登录工具,允许用户通过网络连接到其他主机进行操作,但请注意:Telnet传输数据为明文,存在严重安全风险,仅建议在测试或隔离环境中使用,生产环境强烈推荐使用SSH替代,以下是详细操作指南:Telnet客户端使用(连接远程服务)安装Telnet客户端……

    2025年7月1日
    11000
  • linux 如何进入sqlplus

    在Linux系统中进入SQLPlus是Oracle数据库管理和操作的常见需求,但具体操作需结合环境配置、用户权限及数据库状态等因素,以下是详细步骤和注意事项,帮助用户顺利进入SQLPlus环境,环境准备与基础检查在尝试进入SQLPlus前,需确保以下条件满足,否则可能导致连接失败或命令无法识别:Oracle数据……

    2025年9月29日
    10900

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信