$ 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,而应将其作为参数发送。