问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Shell脚本中basename命令的高效使用指南

创作时间:
作者:
@小白创作中心

Shell脚本中basename命令的高效使用指南

引用
7
来源
1.
https://www.cnblogs.com/my_captain/p/7147656.html
2.
https://www.geeksforgeeks.org/basename-command-in-linux-with-examples/
3.
https://ioflood.com/blog/bash-basename/
4.
http://manual.51yip.com/shell/ivr.html
5.
https://www.cnblogs.com/my_captain/p/7147652.html
6.
https://linuxize.com/post/basename-command-in-linux/
7.
https://www.baeldung.com/linux/basename-guide

在Shell脚本开发中,basename命令是一个不可或缺的工具,主要用于从路径中提取文件名或目录名,并可去除指定的前缀和后缀。掌握其用法可以让你的脚本编写更加简洁高效。

基本语法与选项

basename的基本语法如下:

basename NAME [SUFFIX]
  • NAME: 文件或目录的路径。
  • SUFFIX: 可选参数,用于移除文件名末尾的指定后缀。

选项

  • -a, --multiple: 支持多个输入,分别处理每个参数。
  • -s, --suffix=SUFFIX: 移除所有匹配的后缀(需与 -a 配合使用)。
  • -z, --zero: 使用 NUL 字符分隔输出结果,而非换行符。
  • --help: 显示帮助信息并退出。
  • --version: 显示版本信息并退出。

基础用法示例

提取文件名

$ basename /path/to/file.txt
file.txt

删除指定后缀

$ basename /path/to/file.txt .txt
file

处理多个输入

$ basename -a /path/to/file1.txt /path/to/file2.md
file1.txt
file2.md

高级应用实例

在日志清理脚本中的应用

在系统管理中,日志文件的清理是一个常见的任务。以下是一个使用basename的日志清理脚本示例:

#!/bin/bash
LOG_DIR=/var/log
ROOT_UID=0
LINES=50
E_XCD=66
E_NOTROOT=67
E_WRONGARGS=65

if [ "$UID" -ne "$ROOT_UID" ]
then
  echo "Must be root to run this script."
  exit $E_NOTROOT
fi

case "$1" in
  "" )
    lines=$LINES
    ;;
  *[!0-9]* )
    echo "Usage: `basename $0` file-cleanup"
    exit $E_WRONGARGS
    ;;
  * )
    lines=$1
    ;;
esac

if [ "$PWD" != "$LOG_DIR" ]
then
  echo "Can't change to $LOG_DIR."
  exit $E_XCD
fi

tail -$lines messages > mesg.temp
mv mesg.temp messages
cat /dev/null > wtmp

echo "Logs cleaned up."
exit 0

在这个脚本中,basename $0用于获取脚本自身的名称,用于在错误提示中显示。

在文件格式转换脚本中的应用

在文件处理任务中,经常需要批量转换文件格式。以下是一个将GIF图像转换为PNG格式的Shell脚本示例:

#!/bin/sh
for file in *.gif; do
  if [ ! -f "$file" ]; then
    exit
  fi
  b=$(basename "$file" .gif)
  echo "Converting $b.gif to $b.png"
  giftopnm "$b.gif" | pnmtopng > "$b.png"
done

在这个脚本中,basename用于去除文件的.gif后缀,生成新的文件名。

注意事项

  1. 路径结尾斜杠: 如果路径以 / 结尾,basename 返回空字符串。
  2. 多后缀处理: 若文件有多个后缀,需多次调用 basename 分别删除。
  3. 系统安装: 默认可能未预装,可通过包管理器(如 apt-get, yum, pacman)安装 coreutils 包。

通过以上介绍,你可以灵活运用 basename 命令来简化文件路径操作。无论是处理日志文件、转换文件格式,还是其他文件操作任务,basename 都能帮助你写出更简洁、高效的Shell脚本。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号