用于递归清空多个文件的命令

时间:2017-01-31 13:32:05

标签: bash macos command

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

我知道我可以逐个> logs/logfile.log,但该文件夹中有很多日志,这并不简单。

我顺便使用macOS Sierra。

2 个答案:

答案 0 :(得分:3)

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

您可以使用find来执行此操作

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

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

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

答案 1 :(得分:1)

因为macOS包括 Perl

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

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

parallel '>' ::: logs/*log