【问题标题】:Collect .txt and .log files using find使用 find 收集 .txt 和 .log 文件
【发布时间】:2011-01-04 21:35:40
【问题描述】:

我目前有这个脚本来压缩日志文件:

find . -name '*.log' -print0 | xargs -0 tar zcf $file

当前查找并压缩所有 *.log 文件。我想修改它以包含所有“.txt”文件,但我不知道怎么做,这应该很简单吧?

【问题讨论】:

    标签: unix shell find


    【解决方案1】:

    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'` 我想我做到了,但我需要保留目录结构。
    • @OscarRyz 我忘了添加$file 变量(已修复),但从您的输出看来,您将{} 放在“$file”之前而不是之后。目录结构保留
    • 第一个版本只收集 .txt 文件,但第二个工作。你能只留下第二个吗?
    • @Oscar 修复了它 =)。您需要将两个 -name 选项分组以强制执行优先顺序。
    • 我仍然得到缺少的参数 :( 。无论如何,我设法将其修改为:find . -regex '.*\.\(log\|txt\)' -print0 | xargs -0 tar zcf $file
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 2016-04-11
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多