Omi*_*uin 1 shell tar backup files command-substitution
我正在尝试使用命令替换制作 tar.tgz 文件
有 2012 年 8 月 17 日的备份
-rw-r----- 1 ossec 502 804M Aug 17 2012 BKPMDISINT_i6nir20j.F_bkp
-rw-r----- 1 ossec 502 2.7G Aug 17 2012 BKPSYFINT_i5nir20j.F_bkp
-rw-r----- 1 ossec 502 3.9G Aug 17 2012 BKPMSFFINT_i4nir20j.F_bkp
-rw-r----- 1 ossec 502 28M Aug 17 2012 c-651746692-20120817-00
-rw-r----- 1 ossec 502 2.0G Aug 17 2012 ALG_KLPFINT_ianir576.alg
-rw-r----- 1 ossec 502 1.5G Aug 17 2012 ALG_KLPFINT_i8nir576.alg
-rw-r----- 1 ossec 502 37M Aug 17 2012 ALG_KLPINT_ibnir64h.alg
-rw-r----- 1 ossec 502 2.2G Aug 17 2012 ALG_KLPFINT_i9nir576.alg
-rw-r----- 1 ossec 502 28M Aug 17 2012 c-651746692-20120817-01
-rw-r----- 1 ossec 502 27M Aug 17 2012 ctrl_170803
Run Code Online (Sandbox Code Playgroud)
所以我需要对它们进行焦油处理。我用过这个命令
tar -zcvf DB-Backup-17082012.tgz $(ls -lrth|grep "Aug 17")
但它给了我这个错误
tar: You may not specify more than one `-Acdtrux' option
Try `tar --help' or `tar --usage' for more information.
Run Code Online (Sandbox Code Playgroud)
如果你这样做,$(ls -lrth|grep "Aug 17")你会得到整行,而不仅仅是作为参数的文件名tar,这样就行不通了。一般来说,你应该不能解析的输出ls。
如果您有相对较新版本的 Gnu find ( >= v4.3.3 ),您可以做的是
find . -maxdepth 1 -newermt 20120817T0000 -not -newermt 20130818T0000 -print0 \
| cpio --create --null --format=ustar \
| gzip > DB-Backup-17082012.tgz
Run Code Online (Sandbox Code Playgroud)
如果您find不支持,-newermt您可以使用这些日期时间戳创建两个文件,然后使用 -newer。当然,您也可以使用,-daystart -mtime 但您需要计算天数(或使用反复试验)。
我的一项建议是在格式为 YYYYMMDD 的文件中使用日期。如果您有多个以相同字符串开头的文件,那么第一个排序会更好,第二个类似 05062012 的内容会模糊不清,具体取决于查看文件名的人(6 月 5 日(欧洲)或 5 月 6 日(美国)) . 因此,尽管 1708 必须是 8 月 17 日,但我会调用该文件DB-Backup-20120817.tgz