Atención por favor:
Estoy no preguntando cómo hacer un archivo desde la línea de comandos!
Lo he estado utilizando touch
para 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 touch
sugiere 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
cat
conización!more
cuándoless
hace más que quémore
hacer? Odir
els
. Aunque estoy al tanto de los problemas de compatibilidad.more
anterior a la creación deless
.less
ha sido creado específicamente para abordar las deficiencias demore
.more
todavía existe por razones de compatibilidad con versiones anteriores.dir
yls
son, 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 deless
vsmore
.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
touch
solo 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).> foo
es el método preferido ya que ahorra unafork
yecho -n
debe 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).noclobber
no tiene que configurarse para>
sobrescribir un archivo existente.alias rm='rm -i'
lugar dealias rmi='rm -i'
una mala idea.> .file
en 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,
mktemp
el 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
truncate
yfallocate
cuyo propósito esencial es crear archivos. Simplemente tienen un enfoque más sofisticado. Nunca habrá un programa simple que haga lo que> file
hace, 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
touch
de:Excepto que
:
no actualizará el modtime de un archivo porque no está modificado.MANIFESTACIÓN
SALIDA
NO TOCAR
SALIDA
fuente
\n
al 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
install
está 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/proc
esté montado) o proporcionar otro archivo fuente. Puede establecer la propiedad y los permisos.Como un ejemplo tonto.
fuente