【发布时间】:2011-01-04 21:35:40
【问题描述】:
我目前有这个脚本来压缩日志文件:
find . -name '*.log' -print0 | xargs -0 tar zcf $file
当前查找并压缩所有 *.log 文件。我想修改它以包含所有“.txt”文件,但我不知道怎么做,这应该很简单吧?
【问题讨论】:
我目前有这个脚本来压缩日志文件:
find . -name '*.log' -print0 | xargs -0 tar zcf $file
当前查找并压缩所有 *.log 文件。我想修改它以包含所有“.txt”文件,但我不知道怎么做,这应该很简单吧?
【问题讨论】:
find . -type f \( -name "*.log" -o -name "*.txt" \) -exec tar zcf "$file" {} +
或者:
find . -type f -regex ".*\.\(txt\|log\)$" -exec tar zcf "$file" {} +
如果您的 find 版本符合 POSIX 并且可以使用 + 终止其 -exec 命令,则不需要 xargs(大多数都可以)
【讨论】:
find: missing argument to -exec'` 我想我做到了,但我需要保留目录结构。
$file 变量(已修复),但从您的输出看来,您将{} 放在“$file”之前而不是之后。目录结构将保留
-name 选项分组以强制执行优先顺序。
find . -regex '.*\.\(log\|txt\)' -print0 | xargs -0 tar zcf $file