当脚本中的命令也需要引号时,如何在 bash 脚本中使用引号?

How to use quotes in bash scrips when a command in the script needs quotes too?

我正在尝试制作一个脚本,该脚本将在同一目录中制作视频文件的备份文件,时间戳位于 tar 文件的末尾。该脚本仅用于演示目的,这就是我不打算将文件发送到其他目录的原因。以下是我的进展情况。

#!/bin/bash
cd Compression_Play/
echo Me.$(date +%d_%b_%Y-%k:%M:%S).tar.xz
tar -I "pixz -9t" -cvf Me.$(date +%d_%b_%Y-%k:%M:%S).tar.xz 2017-03-23_01-13-02.avi

我的问题是每当我尝试执行脚本时,它都会给我这个:

Me.29_Mar_2017-22:03:49.tar.xz
tar: -9: (PROGRAM ERROR) Option should have been recognized!?
Try 'tar --help' or 'tar --usage' for more information.

据我所知,问题出在我的 tar 命令中的引号上。有没有办法制作脚本以便我可以保留引号或替换它们?

鉴于您的目标是制作存档,大概保留所有者、文件模式、文件标志和 ACL(如果可用),那么这应该满足您的需要:

#!/bin/bash
archive_name="Me.$(date +%d_%b_%Y-%k:%M:%S).tar.xz"
$(cd Compression_Play/
  tar -cvp 2017-03-23_01-13-02.avi |
  pixz -9t > $archive_name
)

基于压缩包 GitHub page pixz 的 compress/decompress,您将需要反转管道以获取数据:

pixz -x9T < $archive_name | tar xvpf -

Greg 给出了很好的答案,而且效果很好。在摸索了几个小时并从我得到的帮助中拿走了东西之后,我还想出了另一种方法。

#!/bin/bash cd /home/apowell/Compression_Play/Test_Backup tar -I 'pixz -9t' -cvf Me.$(date +%d_%b_%Y-%H_%M_%S).tar.xz /home/apowell/Compression_Play/Linux_Programs

这个通过用普通的 xz 替换 pixz 来压缩更多一点。

#!/bin/bash cd /home/apowell/Compression_Play/Test_Backup tar -I 'xz -9ve -T8 -k' -cvf Me.$(date +%d_%b_%Y-%H_%M_%S).tar.xz /home/apowell/Compression_Play/Linux_Programs