¿Cuál es la diferencia entre ">" y ">>"?

12

¿Cuál es la diferencia entre ls >y ls >>? Necesito entender esto para mi computación GCSE pero no sé cuál es la diferencia.

Helen Schofield
fuente
1
Además de la buena respuesta a continuación, consulte la segunda respuesta (y la más votada) en stackoverflow.com/a/984761/1841533: el uso de >> para escribir en un archivo (por ejemplo, un registro) también tiene el agradable efecto secundario de no aparecerán caracteres "Nul" al comienzo del archivo saif si el archivo se trunca mientras el proceso aún escribe en él. (ej .: durante la rotación del archivo de registro). Debido a que "foo> file" no busca, no nota el cambio de tamaño y aún apunta más allá del comienzo, y el sistema operativo se llena con Nul. foo >> file busca y por lo tanto apunta a la nueva posición (el comienzo).
Olivier Dulac
Como se trata de una pregunta educativa, le sugiero que aprenda a trabajar con la documentación relevante: Manual de referencia de Bash, sección "Redirecciones" (también accesible a través de man bash).
David Foerster

Respuestas:

28

>& >>son operadores de redireccionamiento; transfieren la salida de algo, en este caso ls, a otro lugar. Si esta salida va a un archivo, >truncará el archivo, es decir, eliminará cualquier contenido anterior, mientras que >>agregará nuevos datos al final del archivo, conservando el contenido anterior. Esto funcionará con cualquier entrada, por lo que echo& cat, por ejemplo, también se puede usar de esta manera.

También es de interés el |operador, que pasa los datos a otra aplicación, por lo que ls | cat -nle dará una lista numerada de líneas.

Tuberías es el término relevante.

Mark Williams
fuente
2
¿Truncar o sobrescribir?
DK Bose
2
@DKBose de stracesalida para bash -c 'echo a > blah':, por open("blah, O_WRONLY|O_CREAT|O_TRUNC, 0666)lo que truncar sería el término correcto.
muru
"tuberías" y también "redirección de salida", que usó en su respuesta. Bien hecho.
0xSheepdog
Encontré lo que quería decir: además de esta buena respuesta, consulte la segunda respuesta (y la más votada) en stackoverflow.com/a/984761/1841533 : usar >>para escribir en un archivo (por ejemplo, un registro) también tiene el lado bueno El efecto de no tener caracteres "Nul" aparece al comienzo del archivo saif si el archivo se trunca mientras el proceso todavía escribe en él. (ej .: durante la rotación del archivo de registro). Debido a que "foo> file" no busca, no nota el cambio de tamaño y aún apunta más allá del comienzo, y el sistema operativo se llena con Nul. foo >>filebusca y por lo tanto apunta a la nueva posición (el comienzo).
Olivier Dulac
5

Los símbolos >y >>se utilizan para redirigir la salida a un archivo.

Ambos crearán el archivo si el archivo no existe. Si el archivo ya existe, >sobrescribirá el archivo donde >>agregará los datos al archivo.

Entonces ls > myfilecreará un documento llamado myfilesi no existe. Si myfileya está presente y contiene algunos datos, se sobrescribirá con los nuevos datos que le pase.

Mientras ls >> myfileque creará un archivo si no existe y le escribirá datos. Si el archivo existe con algunos datos, entonces se agregan nuevos datos a su fin.

De repente
fuente
0

SI usa un solo>, sobrescribirá el archivo si ya existe. Ten mucho cuidado cuando uses este.

Si usa dos >>, simplemente se agregará (en otras palabras, comenzará a escribir al final del archivo) si ya existe. De lo contrario, crea un nuevo archivo si no existe.

Eric Larson
fuente
1
¿Por qué repetir una respuesta que ya está dada?
Requist