使用查找命令时,“ ls”被信号13终止[重复]
收藏

这个问题已经有了答案:
ls: terminated by signal 13 when using xargs
3个答案
所以我试图运行一个脚本来搜索df-h中超过阈值的目录,并在该目录上运行find命令来获取前十个最大的文件,然后停止运行find。但是,当它按预期给出前十个文件时,它会吐出几次:

find: ‘ls’ terminated by signal 13

我的问题很简单,我如何阻止这些?我想我明白这是因为我的find命令和head-n 10命令同时运行,head是在find之后通过管道传输的,但是如果有人能详细说明,那就太好了。我的目标是将此提交给正在工作的powers(walmart),让它开始在我们的测试服务器上运行。
另外请注意,find命令中的大小只有5米,因为我的测试服务器上没有10个文件在该目录中那么大。
这是剧本:
#!/bin/bash

#defines what exceeds threshold

threshold="90%|91%|92%|93%|94%|95%|96%|97%|98%|99%|100%|6%"

#puts the output of df -h  into output_df

df -h > output_df

cat output_df | awk -v VAR=$threshold '{if($5~VAR)print $6}' > exceeds_thresh

LINES=()
while IFS= read -r exceeds_thresh
do
find $exceeds_thresh -xdev -size +5M -exec ls -lah {} \; | head -n 10
done < "exceeds_thresh"

#cleaning up the files the script created

rm output_df exceeds_thresh

下面是一个输出示例:
-rw-r-----+ 1 root systemd-journal 16M Jun  1 19:18 /var/log/journal/a237b5bc574941af85c796e15b0ce420/system.journal
-rw-r-----+ 1 root systemd-journal 8.0M May 29 05:38 /var/log/journal/a237b5bc574941af85c796e15b0ce420/system@00056d51a41389f0-0c1bef27b9d68ad6.journal~
-rw-r-----+ 1 root systemd-journal 104M Jun  1 05:55 /var/log/journal/a237b5bc574941af85c796e15b0ce420/system@45697f9ed4b84f07b92c5fcbc8a945bd-0000000000000001-00056d51a40f2f0c.journal
find: ‘ls’ terminated by signal 13
find: ‘ls’ terminated by signal 13
find: ‘ls’ terminated by signal 13
find: ‘ls’ terminated by signal 13
find: ‘ls’ terminated by signal 13
find: ‘ls’ terminated by signal 13
find: ‘ls’ terminated by signal 13
find: ‘ls’ terminated by signal 13


最佳答案:

没什么好担心的。这是一个断管,因为head将在所有行写入stdout之前完成前10行的读取。
您可以在结尾使用>/dev/null 2>&1将其静音,或者使用2>/dev/null将错误静音。我还看到了另一个技巧,即在管道中添加tail -n +1

find $exceeds_thresh -xdev -size +5M -exec ls -lah {} \; | tail -n +1 | head -n 10

这将花费你一些时间,但它不会改变结果。

公众号