搜索并压缩文件?

搜索并压缩文件?
$ ls -lrt *.extract.sys 
-rw-r--r--   1 sftwrk01   test       1729455 Dec 01 21:21 ar.ARAB-PI_3.20101231.extract.sys
-rw-r--r--   1 sftwrk01   test       1684929 Dec 30 21:21 ar.ARAB-PI_5.20101231.extract.sys
-rw-r--r--   1 sftwrk01   test       1696332 Dec 30 21:21 ar.ARAB-PI_1.20101231.extract.sys
-rw-r--r--   1 sftwrk01   test       1726197 Dec 30 21:21 ar.ARAB-PI_7.20101231.extract.sys
-rw-r--r--   1 sftwrk01   test       1692531 Dec 03 21:21 ar.ARAB-PI_2.20101231.extract.sys
-rw-r--r--   1 sftwrk01   test       1606737 Dec 30 21:21 ar.ARAB-PI_0.20101231.extract.sys
-rw-r--r--   1 sftwrk01   test       1803846 Dec 30 21:21 ar.ARAB-PI_8.20101231.extract.sys
-rw-r--r--   1 sftwrk01   test       1689816 Jan 30 21:21 ar.ARAB-PI_9.20101231.extract.sys
-rw-r--r--   1 sftwrk01   test       1724025 Jan 30 21:21 ar.ARAB-PI_6.20101231.extract.sys
....

我需要在 12 月份压缩文件。

到目前为止,我已经尝试过以下方法,但没有奏效

$ ls -lrt *.extract.sys | grep Dec | gzip            
gzip: compressed data not written to a terminal. Use -f to force compression.
For help, type: gzip -h

请帮忙

答案1

假设您想要压缩实际文件内容而不仅仅是列表,则在使用 GZip 压缩之前需要创建 tar 存档。此外,使用 find 可能比 grepping ls 输出更可靠。

首先制作标记文件,其日期代表 12 月的开始和结束,然后查找修改时间介于这两个文件之间的所有文件,并使用 xargs 和 tar 将它们打包并发送到 GZip。操作方法如下:

  touch -t 201012010000 start
  touch -t 201101010000 end
  find . -iname \*.extract.sys -newer start \! -newer end -print0 | xargs -0 tar czvf dec.tar.gz
  rm start
  rm end

确保目录中没有名为“start”和“end”的重要文件!如果有,请使用其他名称或将标记文件放置在 /tmp 下。

还请注意,名称与“*.extract.sys”匹配的任何子目录也将被压缩。如果不希望这样,请添加以下标志以查找:-type f -depth 1

答案2

您正在尝试压缩文件名而不是文件。不要将文件名发送到 stdin,而应将其作为参数发送。

相关内容