当脚本中的命令也需要引号时,如何在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
命令引号。有没有办法制作脚本,以便我可以保留引号或替换它们?
鉴于你的目标是使档案,大概保留所有者,文件模式,文件标志和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 -
对不起。我不得不提到这个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
我对' pixz',但我做了一个快速查找,并修改了我的答案,可能会有所帮助。 'tar'实质上是将一个文件系统串行化为一个字节流,因此您可以通过流水线操作将其输出管道输送到压缩机中。为了证明这一点,我修改了我的答案。 –
谢谢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
它似乎并不像一个问题与引用。当我尝试你的命令时,我得到'tar(child):pixz -9t:Can not exec:Ubuntu上没有这样的文件或目录“。 – codeforester
哦,我以为是。当我用没有这个例子的引号的其他东西来尝试它时。有用。 'xz -9ve -T8 -k --stdout 2017-03-23_01-13-02.avi> Me。$(date +%b_%d_%y-%k:%M:%S).tar.xz ' – dragongamma
在玩了很多之后,你是对的。我需要用撇号替换引号,并将日期部分更改为'(日期+%d_%b_%Y-%H_%M_%S)' – dragongamma