One-Liner命令用于清空终端中的多个文本文件

Hig*_*ife 3 bash shell

您将如何使用单个命令清空终端中的多个文本文件?

我的想法是你可以沿着这些方向使用......:

find /var/log/apache2/*log -exec `echo > '{}'` \;
Run Code Online (Sandbox Code Playgroud)

我知道创建一个易于执行此操作的shell脚本非常简单:

echo "#!/bin/sh\n\necho \"\" > \"$1\"" > /usr/local/bin/empty && chmod +x /usr/local/bin/empty
Run Code Online (Sandbox Code Playgroud)

...

find /var/log/apache2/*.log -exec empty {} \;
Run Code Online (Sandbox Code Playgroud)

但是,如果不以类似的方式创建自己的脚本,是否可以这样做?

Sie*_*geX 10

#!/bin/bash

for file in /var/log/apache2/*.log; do
  : > "$file"
done
Run Code Online (Sandbox Code Playgroud)

或单线版

for file in /var/log/apache2/*.log; do : > "$file"; done
Run Code Online (Sandbox Code Playgroud)

如果需要递归到子目录中,则可以使用以下两个选项:

Bash 4.X

shopt -s globstar; for file in /var/log/apache2/**.log; do : > "$file"; done
Run Code Online (Sandbox Code Playgroud)

POSIX

find /var/log/apache2 -type f -name "*.log" -exec sh -c 'for f; do : > "$f"; done' _ {} +
Run Code Online (Sandbox Code Playgroud)