递归清空多个文件的命令

Command to empty many files recursively

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

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

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

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

你可以用find来完成

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

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

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

由于 macOS 包含 Perl 无论如何:

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

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

parallel '>' ::: logs/*log