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

问题描述:

我正在尝试制作一个脚本,它将在tar文件结尾处的时间戳记的同一目录中制作一个视频文件的备份文件。该脚本仅用于演示目的,这就是为什么我不打算将文件发送到其他目录。以下是我有多远。当脚本中的命令也需要引号时,如何在bash脚本中使用引号?

#!/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命令引号。有没有办法制作脚本,以便我可以保留引号或替换它们?

+0

它似乎并不像一个问题与引用。当我尝试你的命令时,我得到'tar(child):pixz -9t:Can not exec:Ubuntu上没有这样的文件或目录“。 – codeforester

+0

哦,我以为是。当我用没有这个例子的引号的其他东西来尝试它时。有用。 'xz -9ve -T8 -k --stdout 2017-03-23_01-13-02.avi> Me。$(date +%b_%d_%y-%k:%M:%S).tar.xz ' – dragongamma

+0

在玩了很多之后,你是对的。我需要用撇号替换引号,并将日期部分更改为'(日期+%d_%b_%Y-%H_%M_%S)' – dragongamma

鉴于你的目标是使档案,大概保留所有者,文件模式,文件标志和ACL,如果有的话,那么这应该做你需要的东西:基于GitHub page的压缩包压缩

#!/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 
) 

/解压缩为pixz,你需要扭转管,让您的数据指出:

pixz -x9T < $archive_name | tar xvpf - 
+0

对不起。我不得不提到这个tar命令是为了强制tar使用我的所有cpu核心而不是默认的一个。它自己的命令使用了-I选项,它通过tar过滤像pixz这样的程序。这使tar使用我的所有4个cpu核心。但我猜这个命令不能通过带有引号的bash脚本来工作。我只是测试了类似的东西,它可以解决任何错误。 '#!/ bin/bash' 'cd Compression_Play /' 'echo Me。$(date +%d_%b_%y-%k:%M:%S).tar.xz xz -9ve -T8 -k --stdout 2017-03-23_01-13-02.avi>我。$(日期+%b_%d_%Y-%k:%M:%S).tar.xz' – dragongamma

+0

我对' pixz',但我做了一个快速查找,并修改了我的答案,可能会有所帮助。 'tar'实质上是将一个文件系统串行化为一个字节流,因此您可以通过流水线操作将其输出管道输送到压缩机中。为了证明这一点,我修改了我的答案。 –

+0

谢谢Greg。^_ ^ – dragongamma

格雷格给了一个很好的答案,它工作得很好。在我把头放在头上几个小时之后,我也找到了另一种方式,并从我得到的帮助中拿走了东西。

#!/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