Xargs: ls: завершается сигналом 13
Я использую следующую команду для удаления четырех файлов большого размера в папке:
find "/var/www/site1/" -maxdepth 1 -type f | xargs ls -1S | head -n 4 | xargs -d '\n' rm -f
Он отлично работает, но время от времени выдает ошибку обрыва трубы:
xargs: ls: terminated by signal 13
Ответы
Ответ 1
Я столкнулся с подобной проблемой и нашел этот поток для поиска ответа:
Сигнал 13 означает, что что-то записывается в канал, где ничего не читается больше (например, см. http://people.cs.pitt.edu/~alanjawi/cs449/code/shell/UnixSignals.htm).
Дело здесь в том, что команда ls, выполняемая xargs, все еще записывает выходные данные, когда следующая команда главы уже получила все необходимые ей данные и закрыла входной канал. Таким образом, безопасно игнорировать, но это уродливо. См. Также принятый ответ в https://superuser.com/questions/554855/how-can-i-fix-a-broken-pipe-error
Ответ 2
Вы намеренно завершаете свою программу с помощью head -n 4
, которая создает разбитый канал, потому что вы завершили его до завершения "вызывающего". Так как это ожидается от вас, вы можете проигнорировать ошибку, перенаправив ее на /dev/null
, которая отбрасывает ее:
find "/var/www/site1/" -maxdepth 1 -type f | xargs ls -1S | head -n 4
| xargs -d '\n' rm -f 2>/dev/null