我想以递归方式清除给定目录的许多日志文件的内容,而不删除每个文件。用简单的命令可以实现吗?
我知道我可以逐个> logs/logfile.log
,但该文件夹中有很多日志,这并不简单。
我顺便使用macOS Sierra。
答案 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