我有如下所示的多个目录,我想就地压缩每个文件。
/var/dir1/logs/logfile.log
/var/dir2/logs/logfile.log
/var/dir3/logs/logfile.log
我想将find
和tar
结合起来,但我不知道如何使用文件名和路径作为变量。
此命令将所有文件压缩到一个文件中:
find /dir/to/search/ -name "*.log" -exec tar -rvf out.tar {} \;
答案1
尝试使用xargs
。
find *.log | xargs -I input zip input.zip input
请注意,这是 xargs 的 Mac 版本。在 Ubuntu 上,其行为可能有所不同,但希望与之相近的版本能够正常工作。
xargs
通过获取输入的每一行(通过 stdin)并对其运行一些命令来工作。这-I input
意味着对于每一行,使用输入行而不是字符串input
。因此在本例中,它会对zip
每个文件运行命令。