Linux下使用Bash遍历文件夹语法解析

💡 原文中文,约5100字,阅读约需13分钟。
📝

内容提要

本文介绍了使用Bash遍历处理文件夹的常见语法,包括遍历文件夹、路径处理、提取文件名、条件判断和图片转换等。

🔎

延伸解读

路径处理与参数传递的实用技巧

文章展示了如何通过自定义路径变量或位置参数(如$1)来遍历指定文件夹,避免脚本自身被处理。同时介绍了特殊参数如$#(参数个数)和$$(当前PID),这些在编写可复用脚本时非常有用。读者可以借鉴这些方法,使脚本更灵活,适应不同目录结构。

文件名与扩展名提取的细节

使用basename和dirname命令可以分别提取文件名和目录路径。对于扩展名,文章演示了${filename%%.*}和${filename#*.}的用法,并特别指出对于多后缀文件(如a.tar.gz),${file%.*}和${file##*.}能正确提取。这些技巧在处理批量文件时能避免手动解析字符串的麻烦。

条件判断中的空格与变量引用

文章强调在test或[ ]中判断字符串时,变量应使用双引号括起来,以防止内容中的空格导致参数拆分错误。而[[ ]]作为关键字,能自动处理空格问题,无需额外引号。这一区别在编写健壮脚本时至关重要,尤其是处理用户输入的路径时。

从语法到实践:图片转换脚本示例

文章最后提供了一个完整的图片转换脚本,将指定目录中的文件转换为webp格式。该脚本综合运用了遍历、条件判断、参数解析和ffmpeg调用,展示了如何将前述语法组合成实用工具。读者可参考此结构,修改用于其他批量处理任务。

❓

Q&A

如何在Bash中遍历指定文件夹的文件?

可以使用for循环结合test命令来遍历指定文件夹中的文件,例如:for file in $path/*; do if test -f "$file"; then echo "$file"; fi; done。

如何提取文件名和扩展名?

可以使用basename和参数扩展来提取文件名和扩展名,例如:filename=$(basename $file),suffix=${filename#*.}。

Bash中如何进行条件判断?

可以使用test命令或方括号[]进行条件判断,例如:if test "$a" -eq "$b"; then ...; fi。

Bash中如何避免变量内容拆分的问题?

可以使用双引号括起来变量,或者使用[[ ]]来避免内容拆分,例如:if [[ $a == "go to" ]]; then ...; fi。

如何将文件转换为webp格式?

可以使用ffmpeg命令结合遍历脚本,将指定目录中的文件转换为webp格式,例如:/usr/bin/ffmpeg -i $file -c:v libwebp $out/${filename%%.*}.webp。

Bash中如何处理路径?

可以通过自定义路径变量来处理路径,例如:path="/mnt/SDA/TMP/test",然后在遍历时使用该变量。

🏷️

标签

➡️

继续阅读