递归清空多个文件的命令
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
我想递归地清除给定目录的许多日志文件的内容,而不是删除每个文件。可以用一个简单的命令吗?
我知道我可以 > 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