Skip to content

Commit

Permalink
doc: 1、备份文章;
Browse files Browse the repository at this point in the history
  • Loading branch information
01Petard committed Nov 18, 2024
1 parent 1f9e0d1 commit 9bcbb73
Show file tree
Hide file tree
Showing 2 changed files with 92 additions and 0 deletions.
1 change: 1 addition & 0 deletions docs/.vitepress/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ export default {
text: "Linux",
collapsed: false,
items: [
{text: "用Shell命令提取路径信息", link: "/软件/Linux/用Shell命令提取路径信息"},
{text: "命令行系统信息工具", link: "/软件/Linux/命令行系统信息工具"},
{text: "在服务器上部署hexo博客指南", link: "/软件/Linux/在服务器上部署hexo博客指南"},
{text: "Unix系统下的Shell命令", link: "/软件/Linux/Unix系统下的Shell命令"},
Expand Down
91 changes: 91 additions & 0 deletions docs/软件/Linux/用Shell命令提取路径信息.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# 提取`文件夹`的路径信息


> /Users/hzx/Desktop/my_folder
>
> 如何分别获得"my_folder"?
```shell
folder_path="/Users/hzx/Desktop/my_folder"

# 提取目录名称
folder_name=$(basename "$folder_path")
echo "文件夹名称: $folder_name"

# 提取父目录路径名称
parent_folder_path=$(dirname "$folder_path")/
echo "父目录路径: $parent_folder_path"
```

**输出结果**

```shell
文件夹名称: my_folder
父目录路径: /Users/hzx/Desktop/
```

**原理**

- $(basename "$folder_path")

提取路径中最后的部分,可能是文件名,也可能是文件夹名。basename 会找到路径中最后一个 /,并返回它之后的部分。

- $(dirname "$folder_path")/

提取路径中除最后一部分外的目录路径,并在结果末尾加上一个 /。

# 提取`文件`的路径信息

> /Users/hzx/Desktop/123.png
>
> 如何分别获得"123"、"png"、"123.png"和“/Users/hzx/Desktop/”?
**代码示例**

```shell
file_path="/Users/hzx/Desktop/123.png"

# 获取完整文件名 (包括扩展名)
file_name=$(basename "$file_path")
echo "完整文件名: $file_name"

# 获取文件扩展名
file_ext="${file_name##*.}"
echo "文件扩展名: $file_ext"

# 获取文件名 (不包括扩展名)
file_base="${file_name%.*}"
echo "文件名: $file_base"

# 获取父目录路径
parent_folder_path=$(dirname "$file_path")/
echo "父目录路径: $parent_folder_path"
```

**输出结果**

```shell
完整文件名: 123.png
文件扩展名: png
文件名: 123
父目录路径: /Users/hzx/Desktop/
```

**原理解析**

- basename "$file_path"

提取路径中最后的部分,可能是文件名,也可能是文件夹名。

- "${file_name##*.}"

提取文件名中最后一个 . 之后的内容,即扩展名。

这里的 ## 是一种模式匹配操作,表示匹配最长的模式(.*)并删除。

- "${file_name%.*}"

提取文件名中最后一个 . 之前的内容,不包括扩展名。

这里的 % 是模式匹配操作,表示匹配最短的模式(.*)并删除。

0 comments on commit 9bcbb73

Please sign in to comment.