![如何使用 find 命令清除所有文件的内容](https://linux22.com/image/597506/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20find%20%E5%91%BD%E4%BB%A4%E6%B8%85%E9%99%A4%E6%89%80%E6%9C%89%E6%96%87%E4%BB%B6%E7%9A%84%E5%86%85%E5%AE%B9.png)
是否有一个简单的步骤来清除所有内容 “。日志”使用 find 命令查找文件。
目前我正在使用“echo -n > filename.log”,我尝试过 echo -n > /var/application-logs/*.log,但它不起作用。
有没有更好的方法来清除多个文件的内容?
答案1
要清除所有find /var/application-logs -type f -name "*.log"
发现的内容,请使用以下命令:
find /var/application-logs -type f -name "*.log" -exec tee {} \; </dev/null
如果您的 find 版本支持此功能,请使用+
而不是\;
对所有文件使用一次 tee 运行。或者,如果 shell glob 就足够了:
tee /var/application-logs/*.log </dev/null
答案2
答案3
我遇到过类似的情况,我必须使用命令或 shell 脚本删除带有“.log”扩展名的 Docker 容器日志(这是特定于场景的)
以下是脚本
#!/bin/bash
#SHELL SCRIPT TO DELETE THE CONTENT OF THE DOCKER CONTAINER LOG FILES
#Declaring Array
file_list=()
#While loop to read log file name
while IFS= read -d $'\0' -r file ; do
file_list=("${file_list[@]}" "$file")
done < <(find /var/lib/docker/containers/ -type f -name "*.log" -print0)
#Printing log file names
echo "${file_list[@]}"
#Deleting the content of the log files
for f in "${file_list[@]}";do
if [ -f $f ]
then
: > "$f"
fi
done
Bash 元素的解释
file_list=()
是一个包含结果的数组find /var/lib/docker/containers/ -type f -name "*.log"
使用 While 循环读取日志文件名
while IFS= read -d $'\0' -r file ; do
file_list=("${file_list[@]}" "$file")
done < <(find /var/lib/docker/containers/ -type f -name "*.log" -print0)
其中find
子进程由while
命令通过<
并且IFS= read -d $'\0' -r file
是 while 条件
从命令中读取一行输入find
。
echo "${file_list[@]}"
是打印存储在数组中的文件名。
for f in "${file_list[@]}";do
if [ -f $f ]
then
: > "$f"
fi
done
在上面的 for-(if) 循环代码片段中,循环从数组中读取每个文件${file_list[@]}
,然后if
语句使用以下命令then
清除文件的内容: > "$f"