![函数内解压文件的访问名称](https://linux22.com/image/195082/%E5%87%BD%E6%95%B0%E5%86%85%E8%A7%A3%E5%8E%8B%E6%96%87%E4%BB%B6%E7%9A%84%E8%AE%BF%E9%97%AE%E5%90%8D%E7%A7%B0.png)
我在 WSL2 上运行 Ubuntu。我经常从学校的网站下载压缩的作业文件。它们会进入我在 Windows 上的“下载”文件夹。我希望将它们复制到我的 Linux 文件系统上的特定路径中,解压缩,然后重命名以将我的名字放在文件名前面。
这是我到目前为止所拥有的:
params: $1: filename, $2: week_x, $3: day_y
hwcopy() {
cp $1 /home/myName/homework/$2/$3
rm -r $1
cd /home/myName/homework/$2/$3
unzip $1
}
我有一个函数addname
,但问题是如果我调用addname $1
,那只会重命名压缩文件夹。
这是我想到的一个解决方案:
hwcopy() {
cp $1.zip /home/myName/homework/$2/$3
rm -r $1.zip
cd /home/myName/homework/$2/$3
unzip $1.zip
addname $1
}
我想这会起作用,但有点烦人,因为在自动完成 $1 的文件名后,每次我想调用该函数以删除参数中的 .zip 时,我都需要按退格键 4 次。有没有一种简单的方法可以做到这一点?
我是 Linux 新手,所以我不知道该怎么做,但我在想也许有一种方法可以将 $1 作为字符串保存在函数内,然后截掉最后 4 个字符,然后将其传递到其他所有内容中?
答案1
在 bash 中,使用 char 替换%
来删除内容结尾:
$ file="myfile.zip"
$ echo "${file%.zip}"
myfile
您可以使用通配符:
$ file="myfile.zip"
$ echo "${file%.*}"
myfile
您可以使用 double 最大化主题%
:
$ file="myfile.tar.gz"
$ echo "${file%.*}"
myfile.tar
$ echo "${file%%.*}"
myfile