我有一点点,可能是非常愚蠢的问题..
我正在尝试为tar和gzip创建一个使用文件名(作为参数给出)的别名,但它没有按预期转换为输出中的文件名。
我的别名是:
alias targz='tar -cvzf $1.tar.gz $1'
它可以正常工作,但是在设置文件名时,存储在$ 1中的参数无法正常工作,它会将其拉成一个名为“.tar.gz”的文件。
我尝试回复'$ 1.tar.gz',输出为'.tar.gz',所以,我认为它应该是非常愚蠢的格式。
欢迎任何帮助,
答案 0 :(得分:4)
别名没有位置参数。它们基本上是宏(别名在执行时会被别名的文本替换)。
你可以使用一个功能:
targz() {
tar -cvzf "$1".tar.gz "$1"
}
或脚本
#!/bin/bash
tar -cvzf "$1".tar.gz "$1"
就个人而言,我一直在使用类似下面的脚本来实现类似的目标(为方便起见添加了评论):
#!/bin/bash
#support multiple args
for arg in "$@"
do
#strip ending slash if present (tab-completion adds them)
arg=${arg%/}
#compress with pigz (faster on multicore systems)
tar c "$arg" | pigz - > "$arg".tgz
done
如果你想要我的完整版本,如果tarring和压缩成功,我也会删除参数目录(类似于gzip对单个文件的作用)
#!/bin/bash
set -o pipefail
for arg in "$@"
do
arg=${arg%/}
tar c "$arg" | pigz - > "$arg".tgz && rm -rf "$arg"
done
<强>更新强> 归功于@ mklement0更简洁,更有效地剥离结尾斜杠。
答案 1 :(得分:1)
为函数使用别名,例如:
alias targz='function targz_() { tar -cvzf "$1.tar.gz" "$1"; return 0; }; targz_ '
答案 2 :(得分:0)
尝试创建一个脚本来执行此操作,就像这样。
echo """
#!/bin/bash if [ -z $1 ]; then
echo "Variable is Null"
else
tar -cvzf $1.tar.gz $1
fi
""" > /usr/local/bin/targz
chmod +x /usr/local/bin/targz