【发布时间】:2017-06-16 23:14:29
【问题描述】:
我想递归地清除给定目录的许多日志文件的内容,而不删除每个文件。一个简单的命令可以做到吗?
我知道> logs/logfile.log 可以一一做,但是那个文件夹里有很多日志,这并不简单。
顺便说一句,我正在使用 macOS Sierra。
【问题讨论】:
我想递归地清除给定目录的许多日志文件的内容,而不删除每个文件。一个简单的命令可以做到吗?
我知道> logs/logfile.log 可以一一做,但是那个文件夹里有很多日志,这并不简单。
顺便说一句,我正在使用 macOS Sierra。
【问题讨论】:
因为 macOS 无论如何都包含 Perl:
perl -e 'for(<logs/*log>){truncate $_,0}'
或者,更简洁地说,如果您使用 homebrew 并且您已经安装了 GNU Parallel(这只是一个 Perl 脚本),您可以这样做:
parallel '>' ::: logs/*log
【讨论】:
感谢@chepner 向我展示了防止文件名中出现双引号的更好方法:
你可以使用find来做
find start_dir -type f -exec sh -c '> "$1"' _ {} \;
如果你不想要所有文件,你可以添加额外的限制,比如如果你只想要以 .log 结尾的文件,你可以这样做
find start_dir -type f -name '*.log' -exec sh -c '> "$1"' _ {} \;
【讨论】: