ls: 使用 xargs 时由信号 13 终止

人气:961 发布:2022-10-16 标签: find xargs

问题描述

我正在使用以下命令删除文件夹中最大的四个文件:

I'm using the following command to delete four largest size files in a folder:

find "/var/www/site1/" -maxdepth 1 -type f | xargs ls -1S | head -n 4 | xargs -d '
' rm -f

它工作正常,但时不时抛出破管错误:

It works fine, but from time to time throws broken pipe error:

xargs: ls: terminated by signal 13

推荐答案

我遇到了类似的问题,在搜索答案时发现了这个线程:

I ran across a similar issue and found this thread on search for an answer:

信号 13 表示将某些内容写入管道,不再从中读取任何内容(例如,请参阅 http://people.cs.pitt.edu/~alanjawi/cs449/code/shell/UnixSignals.htm ).

Signal 13 means something is written to a pipe where nothing is read from anymore (e.g. see http://people.cs.pitt.edu/~alanjawi/cs449/code/shell/UnixSignals.htm ).

这里的要点是,当下面的 head 命令已经获得了它想要的所有输入并关闭了它的输入管道时,由 xargs 执行的 ls 命令仍在写入输出.因此,忽略它是安全的,但它很丑陋.另请参阅 https://superuser.com/questions/中接受的答案554855/how-can-i-fix-a-broken-pipe-error

The point here is that the ls command as executed by xargs is still writing output when the following head command already got all the input it wants and closed its input-pipe. Thus it's safe to ignore, yet it's ugly. See also the accepted answer in https://superuser.com/questions/554855/how-can-i-fix-a-broken-pipe-error

163