迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 >

使用 Bash 获取文件名和扩展名

作者:迹忆客 最近更新:2023/03/17 浏览次数:

近年来,Bash 脚本变得非常流行,无论是用于你的日常 Linux 管理任务还是整个 DevOps 自动化任务。

假设你发现自己想在 bash 脚本中分别提取文件名及其扩展名。例如,有一个名为 server.py 的 python 文件。我们希望通过分隔名称 server 和扩展名 py 将该字符串分成两部分。

使用 Bash 获取文件名和扩展名

为了演示目的,我们编写了一个 bash 脚本。如果需要,你可以在脚本中的任何位置使用此代码。

  • 首先,我们将检查用户是否提供了正确的参数。下面的代码片段使用了一个 if 语句,使 = 等于 0 0,这意味着没有提供任何参数;在这种情况下,我们将使用 pwd 或我们当前的工作目录作为默认参数。
#!/bin/bash

# Checking if arguments have been provided:
if [[ $# == 0 ]]; then
    cDir=$(pwd) # Setting the cDir variable to current directory
    echo "[-] No directory provided!"
else
    cDir=$1

fi
echo "[+] Setting the directory to $cDir"
  • 接下来,我们检查用户提供的目录是否存在。如果它不存在,我们将退出脚本。
# Checking if the directory exists:
if [[ ! -d $cDir ]]; then
    echo "[-] Directory $cDir doesn't exist!"
    exit
fi
  • 现在,我们开始使用简单的 ls 命令在 allFile 变量中提取目录中可用的文件(当然,如果它有效),该命令在 Linux 和 Windows 操作系统中的 PowerShell 中运行。
# Main extraction:
allFile=`ls $cDir`
echo;
  • 在这里,我们检查提供的路径的最后一个值是否不是/,如果不是,我们将其添加到末尾以避免任何错误。

  • 这不是通过使用 if 语句。${cDir: -1} != '/' 表示 如果文件结尾不是,那么在结尾处增加 /提供的路径。

# Checking if the last value of the path is '/' or not:
if [[ ${cDir: -1} != '/' ]]; then
    cDir+='/'
fi
  • 接下来,我们使用 for loop 和变量 $allFile 遍历文件夹中存在的所有内容。记得之前 $allFile 的值为 ls $cDir
# Iterating over everything in the folder
for item in $allFile; do
    # Appending path to each file:
    item="$cDir$item"

我们在循环中使用 -f 标志检查检测到的文件是否属于 type file。如果是这种情况,我们会从文件名中删除点部分,例如扩展名部分。

  • 最后,我们使用 echo 以我们想要的方式打印结果。
# Checking if current item is a file:
if [[ -f $item ]]; then
	ext=`ls $item | rev | cut -d '.' -f 1 | rev`
	file_name=`ls $item | rev | cut -d '.' -f 2 | rev`
	echo "File Name: $file_name -> Extension: $ext"
fi
  • 此脚本检查特定目录是否存在。如果目录存在,它将提及所有文件及其扩展名。
┌─[root@parrot][/home/user/Downloads]
└──╼ #./test2.sh
[-] No directory provided!
[+] Setting the directory to /home/user/Downloads

File Name: /home/user/Downloads/ExtraCredit_Sockets_Intro -> Extension: pdf
File Name: /home/user/Downloads/project -> Extension: sh
File Name: /home/user/Downloads/test2 -> Extension: sh
File Name: /home/user/Downloads/test -> Extension: txt

代码的每一行都有注释,所以如果你有任何困惑,你可以检查一下。

如果你想使用这个脚本,这里是它的完整版本。

#!/bin/bash

# Checking if arguments have been provided:
if [[ $# == 0 ]]; then
	cDir=$(pwd) # Setting the cDir variable to current directory
	echo "[-] No directory provided!"
else
	cDir=$1
fi
echo "[+] Setting the directory to $cDir"

# Checking if the directory exists:
if [[ ! -d $cDir ]]; then
	echo "[-] Directory $cDir doesn't exist!"
	exit
fi

# Main extraction:
allFile=`ls $cDir`
echo;

# Checking if the last value of the path is '/' or not:
if [[ ${cDir: -1} != '/' ]]; then
	cDir+='/'
fi

# Iterating over everything in the folder
for item in $allFile; do
	# Appending path to each file:
	item="$cDir$item"
	# Checking if current item is a file:
	if [[ -f $item ]]; then
		ext=`ls $item | rev | cut -d '.' -f 1 | rev`
		file_name=`ls $item | rev | cut -d '.' -f 2 | rev`
		echo "File Name: $file_name -> Extension: $ext"
	fi
done

执行 Bash 文件以获取文件名和扩展名

如果你是尝试学习 bash 的新手并且不知道如何运行,请使用此代码;你所要做的就是创建一个带有 .sh 扩展名的文件,这意味着它是一个 bash 文件。

之后,使用你选择的终端导航到该目录并键入 ./filename,这将执行该文件。

如果你使用的是 Windows 操作系统,请键入 bash file.sh,它应该可以正常运行。

请记住在你的情况下使用脚本的正确文件名。

你需要在终端中使用 chmod +x [文件名] 提供正确的权限。

如果你使用的是 Windows,请以管理员身份运行 PowerShell 或命令提示符以避免任何与权限相关的问题。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 Bash 脚本中运行 GDB

发布时间:2023/03/17 浏览次数:105 分类:编程语言

本教程演示了如何在 bash 脚本中运行 gdb,该脚本带有一个接受命令行参数的二进制文件。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便