2015-01-06 2 views
16

Я использую следующую команду, чтобы удалить четыре большие файлы размера в папке: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 

ответ

19

я наткнулся на аналогичный вопрос и нашел эту тему на поиск ответа:

Сигнал 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