你如何设置 tar 的默认行为?

Com*_*ast 2 tar

除了 -cvzpf 之外,我从来不需要为 tar 使用任何其他选项。有没有办法将其设置为默认行为?

虽然我认识到通常不可能说出为什么有人以一种方式而不是另一种方式编写程序,但我不明白为什么 tar 不像大多数其他命令行实用程序那样做事情,即:

command -options /source/path /target/path
Run Code Online (Sandbox Code Playgroud)

为什么是这样:

command -options /target/path /source/path
Run Code Online (Sandbox Code Playgroud)

R S*_*ltz 6

-cvzpf 不是默认行为,至少有以下原因。

  1. -c 指定创建一个档案,至少有同样的可能性,人们想要提取档案或查看档案的内容。
  2. -v 指定详细操作,有些人不想看到所有内容
  3. -p 这与创建档案无关。
  4. -f 以防用户希望将输出通过管道传输到不同的设备/程序而不是文件(或传统 Unices 中的默认磁带设备)。

关于为什么它不是您建议的方式,这是处理它与磁带驱动器和原始作者编码的使用的历史原因。

关于使其成为默认行为,您可以创建一个别名,但是,您需要一个单独的别名来提取文件。

使用 GNU 实现更改默认选项的另一种方法tar是设置TAR_OPTIONS环境变量。虽然我发现当您尝试将 -f 指定为选项之一时它不喜欢它。

export TAR_OPTIONS=-tvzp
Run Code Online (Sandbox Code Playgroud)

请注意,虽然您可以设置选项,但如果您向 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.
Run Code Online (Sandbox Code Playgroud)