La forma abreviada puede estar relacionada con el shell, mientras que el toque es un comando independiente. Por lo tanto, la forma abreviada depende de qué shell use (y las personas tienen fuertes preferencias en esta área), ya que tal vez no todos proporcionen el acceso directo. touchser independiente funcionará de la misma manera, sea lo que sea que use.
El primer ejemplo debe editarse : >> fileo incluso >> file, de modo que tengan el mismo efecto, es decir, NO destruyan el contenido del archivo.
user000001
2
touchactualiza principalmente el mtime. No vacía un archivo existente a diferencia >.
rexkogitans
2
Ninguno de los comandos "crea un archivo vacío"; solo tienen este resultado si el archivo aún no existe. Para garantizar un archivo vacío, necesita > file.
alexis
Respuestas:
47
Ni siquiera necesitas usar :; puede simplemente > file(al menos en bash; otros shells pueden comportarse de manera diferente).
En términos prácticos, no hay una diferencia real aquí (aunque la minúscula sobrecarga de llamar /bin/touches una cosa).
touch, sin embargo, también se puede usar para modificar las marcas de tiempo en un archivo que ya existe sin cambiar o borrar el contenido; Además, > fileeliminará cualquier fileque ya exista. Esto se puede solucionar usando en su lugar >> file.
Otra diferencia touches que puede hacer que cree (o actualice la marca de tiempo) múltiples archivos a la vez (por ejemplo touch foo bar baz quux) con una sintaxis más sucinta que con la redirección, donde cada archivo necesita su propia redirección (por ejemplo >foo >bar >baz >quux).
Utilizando touch:
$ touch foo; stat -x foo; sleep 2; touch foo; stat -x foo
File:"foo"Size:0FileType:RegularFileMode:(0644/-rw-r--r--)Uid:(991148597/redacted)Gid:(1640268302/redacted)Device:1,5Inode:8597208698Links:1Access:FriMay2510:55:192018Modify:FriMay2510:55:192018Change:FriMay2510:55:192018File:"foo"Size:0FileType:RegularFileMode:(0644/-rw-r--r--)Uid:(991148597/redacted)Gid:(1640268302/redacted)Device:1,5Inode:8597208698Links:1Access:FriMay2510:55:212018Modify:FriMay2510:55:212018Change:FriMay2510:55:212018
Usando la redirección:
$ > foo; stat -x foo; sleep 2;>> foo; stat -x foo
File:"foo"Size:0FileType:RegularFileMode:(0644/-rw-r--r--)Uid:(991148597/redacted)Gid:(1640268302/redacted)Device:1,5Inode:8597208698Links:1Access:FriMay2510:55:212018Modify:FriMay2510:56:252018Change:FriMay2510:56:252018File:"foo"Size:0FileType:RegularFileMode:(0644/-rw-r--r--)Uid:(991148597/redacted)Gid:(1640268302/redacted)Device:1,5Inode:8597208698Links:1Access:FriMay2510:55:212018Modify:FriMay2510:56:252018Change:FriMay2510:56:252018
Parece >> fileque no actualizará el tiempo de modificación. No es lo que OP está buscando, pero solo quería señalar que no parece ser una alternativa completa al tacto.
Jesse_b
2
Dado que la pregunta no especifica un shell particular. Puede ser bueno señalar que > fileen zsh es equivalente a cat > file, no : > file.
JoL
Además, tcsh permite : > file, pero se equivoca > file. ¿Quizás la equivalencia de > fileto : > filese limita al bourne shell and bash?
JoL
+1 por minuciosidad, sin embargo, tenga en cuenta que en varios shells convencionales (incluso adivinaría todos o la mayoría de los shells porque la implementación más simple naturalmente haría que esto funcione como un efecto secundario), puede tocar múltiples archivos usando la redirección de shell: : >foo >baro lo : >>foo >>barhará tocar ambos fooy bar.
mtraceur
Solo para ser pedante debido al contexto de la pregunta real aquí, pero : >foo >barno lo harán touchlos archivos; redirigirá la salida (nula) de :a los archivos. touchtocaría los archivos. (:
DopeGhoti
32
Porque puedes hacer touchmúltiples archivos de una vez sin tener que escribir caracteres especiales adicionales. Eso incluye cosas como la expansión de llaves, por ejemplo touch file{1,2,3,4}.
Otro problema es que cuando escribe un tutorial, es bastante importante darse cuenta de que sus lectores probablemente no estén muy versados en el tema. Un comando simple puede ser mucho más comprensible que una combinación extraña de caracteres que no son letras. Esperaría que haya varios usuarios casuales de shell que no saben qué :es, por la sencilla razón de que realmente no hace nada. Del mismo modo para un plano > foosin un comando: incluso si sabe lo que es una redirección, una redirección sin una fuente puede no ser intuitiva.
Además, aquí en unix.se a menudo escribimos muestras de comandos con un signo de dólar inicial para indicar la solicitud. Los caracteres especiales al comienzo de la línea pueden confundirse con eso. (Tenga en cuenta que hay sistemas y shells que se usan >como parte de la solicitud predeterminada).
Y si el comando no se comprende completamente, siempre hay "toque de hombre". Dudo que "man:> file" devuelva algo útil :-) También mensajes WRT, algunos (quizás la mayoría) le permiten configurar el mensaje para que sea lo que quiera. El mío muestra el nombre del sistema (porque uso muchos xterms remotos) y el directorio actual, y está configurado en diferentes colores para diferentes sistemas.
jamesqf
1
@jamesqf, sí. Ahora, por supuesto, también hay help :o lo que tenga su shell para la documentación. Pero eso requiere reconocerlo :como un comando en sí mismo, recordar que no todo tiene una página de manual y, finalmente, poder encontrarlo :en la documentación. La última parte puede ser bastante difícil. : D
ilkkachu
@jamesqf, y sí, me refería principalmente al carácter final de la solicitud predeterminada.
ilkkachu
1
+1 por señalar los aspectos de intuición y no ser una construcción oscura.
mtraceur
@ilkkachu: Sí. Encontrar puntos en la documentación no es tan difícil: encontrar uno que no sea solo puntuación es un asunto diferente :-)
jamesqf
18
Bueno, para mí, la razón principal es la legibilidad. Una vez touch fileque sepa lo que está sucediendo, incluso alguien que no esté bien educado en scripting de shell sabe lo que está sucediendo. Y si no, es fácil de hacer man touchy ver esto:
A FILE argument that does not exist is created empty
Con las cosas crípticas como :y >, es más difícil saber qué está sucediendo, y como no hay una ventaja real, no hay necesidad de usar eso.
Imagine que está buscando uno de sus viejos scripts de shell del cual solo recuerda que se está creando algún archivo marcador en / tmp. Es fácil seleccionar todos sus archivos * .sh para la palabra "touch". En cambio, buscar un colon generará muchos falsos positivos si no sabe qué nombre de archivo exacto buscar.
touch
ser independiente funcionará de la misma manera, sea lo que sea que use.: >> file
o incluso>> file
, de modo que tengan el mismo efecto, es decir, NO destruyan el contenido del archivo.touch
actualiza principalmente el mtime. No vacía un archivo existente a diferencia>
.> file
.Respuestas:
Ni siquiera necesitas usar
:
; puede simplemente> file
(al menos enbash
; otros shells pueden comportarse de manera diferente).En términos prácticos, no hay una diferencia real aquí (aunque la minúscula sobrecarga de llamar
/bin/touch
es una cosa).touch
, sin embargo, también se puede usar para modificar las marcas de tiempo en un archivo que ya existe sin cambiar o borrar el contenido; Además,> file
eliminará cualquierfile
que ya exista. Esto se puede solucionar usando en su lugar>> file
.Otra diferencia
touch
es que puede hacer que cree (o actualice la marca de tiempo) múltiples archivos a la vez (por ejemplotouch foo bar baz quux
) con una sintaxis más sucinta que con la redirección, donde cada archivo necesita su propia redirección (por ejemplo>foo >bar >baz >quux
).Utilizando
touch
:Usando la redirección:
fuente
>> file
que no actualizará el tiempo de modificación. No es lo que OP está buscando, pero solo quería señalar que no parece ser una alternativa completa al tacto.> file
en zsh es equivalente acat > file
, no: > file
.: > file
, pero se equivoca> file
. ¿Quizás la equivalencia de> file
to: > file
se limita al bourne shell and bash?: >foo >bar
o lo: >>foo >>bar
hará tocar ambosfoo
ybar
.: >foo >bar
no lo harántouch
los archivos; redirigirá la salida (nula) de:
a los archivos.touch
tocaría los archivos. (:Porque puedes hacer
touch
múltiples archivos de una vez sin tener que escribir caracteres especiales adicionales. Eso incluye cosas como la expansión de llaves, por ejemplotouch file{1,2,3,4}
.Otro problema es que cuando escribe un tutorial, es bastante importante darse cuenta de que sus lectores probablemente no estén muy versados en el tema. Un comando simple puede ser mucho más comprensible que una combinación extraña de caracteres que no son letras. Esperaría que haya varios usuarios casuales de shell que no saben qué
:
es, por la sencilla razón de que realmente no hace nada. Del mismo modo para un plano> foo
sin un comando: incluso si sabe lo que es una redirección, una redirección sin una fuente puede no ser intuitiva.Además, aquí en unix.se a menudo escribimos muestras de comandos con un signo de dólar inicial para indicar la solicitud. Los caracteres especiales al comienzo de la línea pueden confundirse con eso. (Tenga en cuenta que hay sistemas y shells que se usan
>
como parte de la solicitud predeterminada).fuente
help :
o lo que tenga su shell para la documentación. Pero eso requiere reconocerlo:
como un comando en sí mismo, recordar que no todo tiene una página de manual y, finalmente, poder encontrarlo:
en la documentación. La última parte puede ser bastante difícil. : DBueno, para mí, la razón principal es la legibilidad. Una vez
touch file
que sepa lo que está sucediendo, incluso alguien que no esté bien educado en scripting de shell sabe lo que está sucediendo. Y si no, es fácil de hacerman touch
y ver esto:Con las cosas crípticas como
:
y>
, es más difícil saber qué está sucediendo, y como no hay una ventaja real, no hay necesidad de usar eso.fuente
Imagine que está buscando uno de sus viejos scripts de shell del cual solo recuerda que se está creando algún archivo marcador en / tmp. Es fácil seleccionar todos sus archivos * .sh para la palabra "touch". En cambio, buscar un colon generará muchos falsos positivos si no sabe qué nombre de archivo exacto buscar.
fuente