除了 -cvzpf 之外,我从来不需要使用 tar 的任何其他选项。有什么方法可以将其设置为默认行为吗?
虽然我认识到通常不可能说为什么有人以一种方式而不是另一种方式编写了程序,我不明白为什么 tar 不像大多数其他命令行实用程序那样做事情,即:
command -options /source/path /target/path
为什么反而是:
command -options /target/path /source/path
答案1
-cvzpf 不是默认行为,至少有以下原因。
- -c 指定创建一个存档,人们至少同样可能想要提取存档或查看存档的内容。
- -v 指定详细操作,有些人不想看到所有内容
- -p 这与以下内容无关创造档案。
- -f 如果用户想要将输出通过管道传输到不同的设备/程序而不是文件(或传统 Unices 中的默认磁带设备)。
至于为什么它不是你建议的那样,这是处理它与磁带驱动器的使用和原始作者编码的历史原因。
关于使其成为默认行为,您可以创建一个别名,但是,您需要一个单独的别名来提取文件。
更改 GNU 实现的默认选项的另一种方法tar
是设置TAR_OPTIONS
环境变量。尽管我发现当您尝试指定 -f 作为选项之一时它不喜欢它。
export TAR_OPTIONS=-tvzp
请注意,虽然您可以设置选项,但如果您向 tar 传递冲突的选项,则会导致错误。例如,如果您按上述方式设置了 TAR_OPTIONS 并且尝试提取存档,您将收到以下错误。
tar: You may not specify more than one `-Acdtrux' or `--test-label' option
Try `tar --help' or `tar --usage' for more information.
答案2
我不知道关于 的两个问题的答案tar
,但我可以告诉您如何设置任何命令行工具的默认行为。
使用alias
命令,您可以用字符串替换 shell 中的任何单词。别名的具体使用取决于您使用的 shell。以下示例在bash
shell 中运行:
alias tar='tar -cvzpf'
这会将单词 tar 替换为“tar -cvzpf”。为了让 bash 能够“记住”这一点,需要将别名命令放置在 bash shell 启动时执行的脚本中,例如.bashrc
. (有些用户喜欢在单独的脚本中收集所有别名,例如.alias
,并从 调用该脚本.bashrc
。)
在csh
/ tcsh
shell 中,您可以省略=
并使用双引号"
而不是单引号。要了解您正在使用哪个 shell,请输入echo $SHELL
。