Atención por favor:
Estoy no preguntando cómo hacer un archivo desde la línea de comandos!
Lo he estado utilizando touchpara hacer archivos durante años sin prestar atención a que su propósito principal es otra cosa. Si uno quiere crear un archivo desde la línea de comando, hay muchas posibilidades:
touch foo.bar
> foo.bar
cat > foo.bar
echo -n > foo.bar
printf '' > foo.bar
Y estoy seguro de que hay más.
Pero el hecho es que ninguno de los comandos anteriores está diseñado para crear archivos. Por ejemplo, man touchsugiere que este comando es para cambiar las marcas de tiempo del archivo. ¿Por qué un sistema operativo tan completo como Unix (o Linux) no tiene un comando diseñado exclusivamente para crear archivos?
bash
shell
command-line
files
Pouya
fuente
fuente

catconización!morecuándolesshace más que quémorehacer? Odirels. Aunque estoy al tanto de los problemas de compatibilidad.moreanterior a la creación deless.lessha sido creado específicamente para abordar las deficiencias demore.moretodavía existe por razones de compatibilidad con versiones anteriores.dirylsson, para la mayoría de las intenciones y propósitos, el mismo ejecutable; difieren solo en un puñado de bytes. Una nueva herramienta diseñada específicamente para la creación de archivos haría menos que las herramientas existentes, y como tal sería una regresión, no como una mejora en el caso delessvsmore.Respuestas:
Diría que casi nunca es necesario crear un archivo vacío que no se llene con contenido inmediatamente en la línea de comandos o en el script de shell.
No hay absolutamente ningún beneficio en crear un archivo primero y luego usar la redirección de E / S para escribir en el archivo si puede hacerlo en un solo paso.
En aquellos casos en los que realmente desea crear un archivo vacío y dejarlo, diría que
> "${file}"no podría ser más breve y elegante.TL; DR : No existe porque la creación de archivos vacíos a menudo no tiene uso, y en los casos que tiene ya hay una miríada de opciones disponibles para lograr este objetivo.
En una nota al margen, el uso
touchsolo funciona si el archivo no existe, mientras que las opciones que usan la redirección siempre truncarán el archivo, incluso si existe (por lo que técnicamente, esas soluciones no son idénticas).> fooes el método preferido ya que ahorra unaforkyecho -ndebe evitarse, en general, ya que es altamente no portables.fuente
>>). Me refería a los ejemplos dados por OP usando>. Anexar sería bastante inútil si lo que busca es crear archivos (o NOOP si existen).noclobberno tiene que configurarse para>sobrescribir un archivo existente.alias rm='rm -i'lugar dealias rmi='rm -i'una mala idea.> .fileen una línea de comando, lo hará perfectamente bien sin el:.La respuesta de Adrian Frühwirth es correcta. Sólo quería añadir que en realidad hay una orden escrita específicamente para crear archivos:
mktemp.De acuerdo,
mktempel trabajo no es crear un archivo con un nombre específico, es simplemente crear un archivo . Sin embargo, como ya le han dicho, hay muchas formas más eficientes y elegantes de crear archivos con un nombre dado que proporcionar un comando para eso sería inútil.Dicho esto, también tiene
truncateyfallocatecuyo propósito esencial es crear archivos. Simplemente tienen un enfoque más sofisticado. Nunca habrá un programa simple que haga lo que> filehace, ya que no hay forma de que sea mejor que> file.fuente
La mayoría de las herramientas básicas de shell no están diseñadas para ningún propósito muy específico. La mayoría de las herramientas básicas de shell están diseñadas solo para interactuar con otros para lograr su propósito. O tal vez debería decirse que la mayoría de las herramientas hacen solo una cosa muy básica, independientemente de cómo se combinen para lograr un objetivo.
Eso crea un archivo vacío. O trunca un archivo existente como lo hará. Usted puede:
para evitar cualquier posibilidad de este último caso a menos que usted:
Puede obtener un comportamiento similar al
touchde:Excepto que
:no actualizará el modtime de un archivo porque no está modificado.MANIFESTACIÓN
SALIDA
NO TOCAR
SALIDA
fuente
\nal final de la línea. Pruebaecho -n >echo-n.file(size = 0) yecho -e >echo-e.file(size = 1)cat. ¿Por qué tener un comando para mostrar un archivo, cuando podría hacer un comando para concatenar múltiples archivos a la salida estándar?¡La utilidad
installestá diseñada para crear archivos! Puede pasar el contenido del archivo a través de/dev/stdin(en la mayoría de los casos, sin embargo, en la mayoría de las versiones de Linux, esto requiere que/procesté montado) o proporcionar otro archivo fuente. Puede establecer la propiedad y los permisos.Como un ejemplo tonto.
fuente