我想压缩(tar
或gzip
或zip
)超过两天的目录。我有以下文件。每个目录都会有多个子目录和文件。
Oct 21 13:01 test1
Oct 22 13:01 test2
期望的输出:
test1.tar
test2.tar
我尝试在下面编写命令;但是,它不起作用。
find . -type d -maxdepth 1 -mtime +2 \! -name '*.gz' -exec gzip {} \;
我收到以下错误。
gzip:test1.tar is a directory -- ignored
gzip:test2.tar is a directory -- ignored
答案1
因为 gzip 只能压缩文件,所以在 gzip 压缩之前首先必须 tar 目录。
你想要做的是将 GNUtar
与“z”一起使用,“z”压缩:
find . -type d -maxdepth 1 -mtime +2 \! -name '*.gz' -exec tar cfz {}.tgz {} \;
评论后编辑:
我没有注意到\! -name '*.gz'
,这在正常情况下是多余的......只要你没有以 . 结尾的目录名.gz
。
find . -type d -maxdepth 1 -mtime +2 -exec tar cfz {}.tgz {} \;
答案2
使用tar
归档实用程序:
find . -type d -maxdepth 1 -mtime +2 ! -name '*.gz' -exec tar -czvf old_dirs.gz '{}' +;
-exec command {} +
此-exec
操作的变体对选定的文件运行指定的命令,但命令行是通过在末尾附加每个选定的文件名来构建的;该命令的调用总数为少得多 比匹配文件的数量。