【问题标题】:Command to empty many files recursively递归清空多个文件的命令
【发布时间】:2017-06-16 23:14:29
【问题描述】:

我想递归地清除给定目录的许多日志文件的内容,而不删除每个文件。一个简单的命令可以做到吗?

我知道> logs/logfile.log 可以一一做,但是那个文件夹里有很多日志,这并不简单。

顺便说一句,我正在使用 macOS Sierra。

【问题讨论】:

    标签: bash macos command


    【解决方案1】:

    因为 macOS 无论如何都包含 Perl

    perl -e 'for(<logs/*log>){truncate $_,0}'
    

    或者,更简洁地说,如果您使用 homebrew 并且您已经安装了 GNU Parallel(这只是一个 Perl 脚本),您可以这样做:

    parallel '>' ::: logs/*log
    

    【讨论】:

      【解决方案2】:

      感谢@chepner 向我展示了防止文件名中出现双引号的更好方法:

      你可以使用find来做

      find start_dir -type f -exec sh -c '> "$1"' _ {} \;
      

      如果你不想要所有文件,你可以添加额外的限制,比如如果你只想要以 .log 结尾的文件,你可以这样做

      find start_dir -type f -name '*.log' -exec sh -c '> "$1"' _ {} \;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-22
        • 2018-07-12
        • 2016-04-26
        • 1970-01-01
        • 2018-08-10
        • 2020-10-24
        • 2014-02-05
        • 2013-01-11
        相关资源
        最近更新 更多