find xargs

find - xargs rm



ls: terminado por la seƱal 13 cuando se usa xargs (3)

Encontré un problema similar y encontré este hilo en la búsqueda de una respuesta:

La señal 13 significa que algo se escribe en una tubería donde ya no se lee nada (por ejemplo, consulte http://people.cs.pitt.edu/~alanjawi/cs449/code/shell/UnixSignals.htm ).

El punto aquí es que el comando ls ejecutado por xargs todavía está escribiendo salida cuando el siguiente comando principal ya obtuvo toda la entrada que desea y cerró su canal de entrada. Por lo tanto, es seguro ignorarlo, pero es feo. Consulte también la respuesta aceptada en https://superuser.com/questions/554855/how-can-i-fix-a-broken-pipe-error

Estoy usando el siguiente comando para eliminar cuatro archivos de mayor tamaño en una carpeta:

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

Funciona bien, pero de vez en cuando lanza un error de tubería rota:

xargs: ls: terminated by signal 13


Está terminando deliberadamente su programa con head -n 4 , que crea el conducto roto porque lo terminó antes de que terminara el "llamante". Como usted lo espera, puede ignorar el error redirigiéndolo a /dev/null que lo descarta:

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


Recibí el mismo error, "terminado por la señal 13", en diferentes circunstancias y otras respuestas aquí me ayudaron a resolver el problema. Me gustaría ampliar la naturaleza del problema:

corpy386 ~/gw/Release/5.1_v9/ClaimCenter $ find . -name ''*.pcf'' -not -name ''*build*'' | xargs grep -l ClaimSnapshotGeneralPanelSet | ( read f && echo $f && grep ''def='' $f ) ./modules/configuration/build/idea/classes/web/pcf/claim/snapshot/default/ClaimSnapshotGeneralPanelSet.auto.pcf def="AddressSnapshotInputSet(Snapshot.LossLocation, Snapshot)" xargs: grep: terminated by signal 13

Entonces, aquí está el mismo error y solo obtendría una línea de salida cuando sabía que hay numerosos archivos que coinciden con lo que estoy buscando. El problema fue que xargs está produciendo múltiples líneas de salida y la read solo consume una sola línea antes de terminar. xargs intenta escribir el resto de sus resultados en una de las canalizaciones, pero el extremo receptor ya se ha ido y se ha ido a casa. Por lo tanto, señal 13: Tubo roto.

La solución fue consumir toda la salida de read f && do_some_things haciendo un bucle - cambiar read f && do_some_things (que se lee solo una vez) para while read f; do do_some_things; done while read f; do do_some_things; done while read f; do do_some_things; done

corpy386 ~/gw/Release/5.1_v9/ClaimCenter $ **find . -name ''*.pcf'' -not -name ''*build*'' | xargs grep -l ClaimSnapshotGeneralPanelSet | while read f; do echo $f; grep ''def='' $f; done** ./modules/configuration/build/idea/classes/web/pcf/claim/snapshot/default/ClaimSnapshotGeneralPanelSet.auto.pcf def="AddressSnapshotInputSet(Snapshot.LossLocation, Snapshot)" ./modules/configuration/build/idea/classes/web/pcf/claim/snapshot/default/ClaimSnapshotGeneralPanelSet.gl.pcf def="AddressSnapshotInputSet(Snapshot.LossLocation, Snapshot)" ./modules/configuration/build/idea/classes/web/pcf/claim/snapshot/default/ClaimSnapshotGeneralPanelSet.Pr.pcf def="ClaimSnapshotGeneralPRPanelSet(Claim, Snapshot)" ./modules/configuration/build/idea/classes/web/pcf/claim/snapshot/default/ClaimSnapshotGeneralPanelSet.Trav.pcf def="AddressSnapshotInputSet(Snapshot.LossLocation, Snapshot)" ./modules/configuration/build/idea/classes/web/pcf/claim/snapshot/default/ClaimSnapshotGeneralPanelSet.wc.pcf def="AddressSnapshotInputSet(Snapshot.LossLocation, Snapshot)" ./modules/configuration/build/idea/classes/web/pcf/claim/snapshot/default/ClaimSnapshotLossDetailsScreen.default.pcf def="ClaimSnapshotGeneralPanelSet(Claim, SnapshotParam)" ./modules/configuration/config/web/pcf/claim/snapshot/default/ClaimSnapshotGeneralPanelSet.auto.pcf def="AddressSnapshotInputSet(Snapshot.LossLocation, Snapshot)" ./modules/configuration/config/web/pcf/claim/snapshot/default/ClaimSnapshotGeneralPanelSet.gl.pcf def="AddressSnapshotInputSet(Snapshot.LossLocation, Snapshot)" ./modules/configuration/config/web/pcf/claim/snapshot/default/ClaimSnapshotGeneralPanelSet.Pr.pcf def="ClaimSnapshotGeneralPRPanelSet(Claim, Snapshot)" ./modules/configuration/config/web/pcf/claim/snapshot/default/ClaimSnapshotGeneralPanelSet.Trav.pcf def="AddressSnapshotInputSet(Snapshot.LossLocation, Snapshot)" ./modules/configuration/config/web/pcf/claim/snapshot/default/ClaimSnapshotGeneralPanelSet.wc.pcf def="AddressSnapshotInputSet(Snapshot.LossLocation, Snapshot)" ./modules/configuration/config/web/pcf/claim/snapshot/default/ClaimSnapshotLossDetailsScreen.default.pcf def="ClaimSnapshotGeneralPanelSet(Claim, SnapshotParam)"

Esta no es exactamente la misma situación que el guión de OP: querían una parte de la entrada y la cortaron a propósito, yo quería toda la secuencia y la corté por accidente, pero la semántica de la cáscara funciona de la misma manera. Los programas tienden a escribirse para que se sigan ejecutando hasta que hayan consumido toda su información en lugar de probarlos para ver si su destinatario aún está escuchando.