Esta pregunta fue provocada por preguntas sobre la ls' -1opción y la tendencia recurrente de las personas a hacer preguntas y respuestas que incluyen el procesamiento de la salida de ls.
Esta reutilización de la salida lsparece comprensible, por ejemplo: si sabe cómo ordenar una lista de archivos ls, puede usar la salida de esa manera como entrada para otra cosa.
Si esas preguntas y respuestas no incluyen una referencia a la lista de nombres de archivo producida que consiste en nombres de archivo que se comportan bien (sin caracteres especiales como espacios y líneas nuevas), a menudo alguien los comenta al señalar el peligro de que la secuencia de comandos no funcione cuando hay son archivos con líneas nuevas, espacios, etc.
find, sorty otras utilidades resuelven el problema de comunicar nombres de archivo "difíciles", por ejemplo, xargsmediante el uso de una opción para separar los nombres de archivo con el carácter / byte NUL que no es un carácter válido en el nombre de archivo (¿el único además de /?) en Sistemas de archivos Unix / Linux.
Miré a la página del manual lsy la salida para ls --help(que tiene más opciones enumeradas) y no pude encontrar que ls(desde coreutils) tiene una opción para especificar la salida separada por NUL. Tiene una -1opción que puede interpretarse como "nombres de archivo de salida separados por nueva línea" )
P : ¿Hay lsalguna razón técnica o filosófica por la que no tiene una opción --zerou -0opción que "muestre nombres de archivos separados por NUL"?
Si hace algo que solo genera los nombres de archivo (y no usa, por ejemplo -l), eso podría tener sentido:
ls -rt -0 | xargs -r0 …
Podría estar perdiendo algo por qué esto no funcionaría, o hay una alternativa para este ejemplo que pasé por alto y que no es mucho más complicada u oscura .
Apéndice:
Hacerlo ls -lrt -0probablemente no tiene mucho sentido, pero de la misma manera que find . -ls -print0no lo hace, por lo que no es una razón para no proporcionar una opción -0/ -z/ --zero.
fuente

ls -rtzDefinitivamente sería útil. Contraste la alternativa: superuser.com/a/294164/21402Respuestas:
ACTUALIZACIÓN (2014-02-02)
Gracias a nuestra propia determinación de @ Anthon al seguir la falta de esta función , tenemos una razón un poco más formal de por qué falta esta función, que reitera lo que expliqué anteriormente:
Mi respuesta original
Este es un poco de mi opinión personal, pero creo que es una decisión de diseño para dejar ese cambio
ls. Si nota que elfindcomando tiene este modificador:Al dejar ese interruptor apagado, los diseñadores estaban insinuando que no debería usar la
lssalida para nada que no sea el consumo humano. Para el procesamiento posterior por otras herramientas, debe usar en sufindlugar.Formas de usar find
Si solo está buscando los métodos alternativos, puede encontrarlos aquí, titulados: Hacerlo correctamente: un resumen rápido . Desde ese enlace, estos son probablemente los 3 patrones más comunes:
(Extensiones comunes no estándar -print0 y -0. Funciona en GNU, * BSDs, busybox)
¿Más evidencia?
Encontré esta publicación de blog del blog de Joey Hess titulada: " ls: las opciones que faltan ". Uno de los comentarios interesantes en este post:
Al seguir buscando, encontré esto en los registros de confirmación de uno de los modificadores adicionales que menciona la publicación del blog de Joey, " nuevo formato de salida -j ", por lo que parece que la publicación del blog se estaba burlando de la idea de agregar un
-zinterruptorls.Referencias
fuente
-0se implemente) en mi pregunta, para no desviar a las personas.ls -1 | tr '\012' '\000'se enumerarán los archivos separados por caracteres NULL.Como las respuestas de @ slm van a los orígenes y posibles razones, no repetiré eso aquí. Dicha opción no está en la lista de características rechazadas de coreutils , pero el parche a continuación ahora es rechazado por Pádraig Brady después de enviarlo a la lista de correo de coreutils. De la respuesta está claro que esta es una razón filosófica (la
lsproducción es para consumo humano).Si desea probar si dicha opción es razonable para usted, haga lo siguiente:
luego aplique el siguiente parche contra commit b938b6e289ef78815935ffa705673a6a8b2ee98e dd 2014-01-29:
Después de otra marca puedes probarlo con:
Entonces, el parche funciona y no puedo ver una razón por la que no lo haría, pero eso no es una prueba de que no haya una razón técnica para dejar de lado la opción.
ls -R0puede que no tenga mucho sentido, pero tampoco lols -Rmquelspuede hacer fuera de la caja.fuente
-zy--zeroestá más en línea con la clasificación (también en coreutils.