脚本
#!/bin/bash
# 目标目录
target_dir="/opt/migrates"
# 如果目标目录不存在,则创建它
if [ ! -d "$target_dir" ]; then
mkdir -p "$target_dir"
fi
# 遍历当前目录下的每一个子目录
for dir in */; do
# 去掉目录名后面的斜杠
dir_name="${dir%/}"
# 将目录打包成压缩包,压缩包名字与文件夹名字同名,并保存到目标目录
tar -czvf "${target_dir}/${dir_name}.tar.gz" "$dir_name"
done
最短路径匹配
${dir%/}
是在Bash(一种常见的Unix/Linux shell)脚本中使用的参数扩展语法,下面详细解释其含义和用法。
基本含义
${dir%/}
用于从变量 dir
的值的右侧删除最短匹配的模式。在这个特定的例子中,模式是 /
,也就是从变量 dir
的值的末尾删除一个斜杠(/
)字符。
语法解释
${variable%pattern}
:这是一种参数扩展的形式,其中variable
是要处理的变量名,pattern
是要匹配并删除的模式。%
表示进行最短匹配删除,也就是说,它会从变量值的右侧开始,删除第一个匹配到的模式。
示例代码
以下是一个简单的Bash脚本示例,展示了 ${dir%/}
的用法:
#!/bin/bash
# 定义一个包含斜杠结尾的目录路径变量
dir="/home/user/documents/"
# 使用 ${dir%/} 去除末尾的斜杠
new_dir="${dir%/}"
# 输出原始目录路径和处理后的目录路径
echo "原始目录路径: $dir"
echo "处理后的目录路径: $new_dir"
代码解释
- 定义变量:
dir="/home/user/documents/"
定义了一个包含斜杠结尾的目录路径变量。 - 参数扩展:
new_dir="${dir%/}"
使用${dir%/}
从变量dir
的末尾删除一个斜杠字符,并将结果赋值给新变量new_dir
。 - 输出结果:使用
echo
命令输出原始目录路径和处理后的目录路径。
运行结果
运行上述脚本,输出结果如下:
原始目录路径: /home/user/documents/
处理后的目录路径: /home/user/documents
可以看到,处理后的目录路径末尾的斜杠已经被删除。
注意事项
- 如果变量
dir
的值末尾没有斜杠,那么${dir%/}
不会对其进行任何修改,直接返回原始值。 - 如果要删除最长匹配的模式,可以使用
${variable%%pattern}
语法。例如,${dir%%/*}
会从变量dir
的右侧开始,删除最长匹配的以/
开头的字符串。