shelll 使用expr 判断文件是一个压缩包文件
时间: 2024-03-07 21:48:45 浏览: 57
使用`expr`命令来判断文件是否为压缩包文件也是可以的。`expr`命令可以用来进行字符串匹配操作。以下是一个示例脚本:
```
#!/bin/bash
filename="example.tar.gz" # 要判断的文件名
if expr "$filename" : '.*\.zip$' > /dev/null; then
echo "This is a zip file."
elif expr "$filename" : '.*\(\.gz\|\.tar\|\.tar\.gz\|\.tgz\)$' > /dev/null; then
echo "This is a compressed file."
else
echo "This is not a compressed file."
fi
```
在上面的代码中,我们使用`expr`命令的正则表达式匹配功能来判断文件名是否符合压缩包文件的后缀名。如果匹配成功则输出对应的信息,否则输出不是压缩包文件的信息。
需要注意的是,`expr`命令的正则表达式语法有一些特殊符号需要转义,例如圆括号和竖线。在上面的代码中,我们使用了`\(\)`来表示圆括号,`\|`来表示竖线。另外,为了避免输出匹配到的字符串,我们使用了重定向来将输出重定向到/dev/null。
需要注意的是,使用`expr`命令时需要注意正则表达式的语法和转义符号,不当的使用可能会导致匹配失败。
相关问题
用户间传递文件时,应该尽可能的使用加密手段。一种简单而可靠的方法,“基于密码的压缩包”。本任务在linux系统下采用系统自带的工具tar和zip。 基于密码的加密方式,其安全性与密码复杂度直接相关。应当使用可靠的方式传递这个密码,或者使用变换方式传递密码,例如:你的生日6位数乘以7再减去我的生日、我的大写拼音名加我的年龄加我的小写英文名、上次我们吃饭的金额乘以11再加上饭店拼音名。代码
以下是使用tar和zip工具创建基于密码的压缩包,并使用变换方式传递密码的示例代码:
```shell
# 定义密码变换函数
function transform_password() {
birthday=19900101 # 你的生日
my_birthday=19900202 # 我的生日
last_meal=100 # 上次我们吃饭的金额
restaurant=restaurant # 饭店拼音名
my_name="MYNAME" # 我的大写拼音名
my_age=30 # 我的年龄
my_nickname="mynick" # 我的小写英文名
password=$(expr $birthday \* 7 - $my_birthday)$(echo $my_name | tr '[:upper:]' '[:lower:]')$(expr $my_age + $last_meal \* 11 + $(echo $restaurant | tr '[:upper:]' '[:lower:]'))$(echo $my_nickname | tr '[:lower:]' '[:upper:]')
echo $password
}
# 创建加密压缩包
tar -czvf - /path/to/my_folder | zip -e --password "$(transform_password)" -r my_folder.zip -
# 解包压缩包
unzip -P "$(transform_password)" my_folder.zip
```
以上代码中,我们定义了一个密码变换函数 transform_password(),将多个值(例如生日、金额、拼音名称等)进行变换和组合生成密码。在创建压缩包时,使用 zip 工具的 -e 选项指定密码,并调用 transform_password() 函数生成密码。在解包时,使用 unzip 工具的 -P 选项指定密码,并调用 transform_password() 函数生成密码。
需要注意的是,密码变换函数中使用的值需要在用户间约定好,并且需要确保变换后的密码复杂度足够高。同时,在传递密码时,也需要确保传递方式是安全的。
阅读全文