El manual de GNU Coreutilsmv
dice:
-f --force Do not prompt the user before removing a destination file.
Sin embargo, este ya parece ser el comportamiento predeterminado, por mv
lo que la -f
opción parece ser superflua. Por ejemplo, en GNU Bash versión 4.3.11:
$ ls -l
total 0
$ touch 1 2; mv -f 1 2; ls
2
$ touch 1 2; mv 1 2; ls
2
Parece poco probable que la intención de la -f
bandera sea anular alias mv="mv -i"
, porque hay varias formas estándar de anular un alias (por ejemplo, usar \mv
) que haría esto de manera más concisa y de una manera que sea coherente en todos los comandos.
El manual señala que, "si especifica más de una de las opciones -i, -f, -n, solo la última tendrá efecto", pero aún parece poco probable que la intención de la -f
bandera sea anular la -i
bandera en general, porque se puede lograr un comportamiento equivalente simplemente usando mv
, que es mucho más conciso y comprensible que usar mv -if
.
Siendo ese el caso, ¿cuál es el propósito de la -f
bandera? ¿Por qué existe?
mount
, por ejemplo (aunque hay mejores ejemplos). ¿Realmente desea recordar cuáles son los valores predeterminados para cada opción, de modo que pueda determinar qué opciones necesita establecer? Es BUENO tener opciones tanto para el valor predeterminado como para el no predeterminado, por lo que puede establecer explícitamente la opción en lugar de tener que realizar un seguimiento mental de cuál es el valor predeterminado. Algo allí es más fácil de recordar que algo que no está allí .Respuestas:
El uso de
-f
se describe más claramente en la página de manual de 4BSD, que fue donde se agregaron las opciones-f
y-i
:Una definición aún más precisa de cómo funciona mv se da en el estándar POSIX , que agrega que
-f
solo se anula-i
si ocurre más adelante en la línea de comando.Entonces, el comportamiento predeterminado es un poco diferente de
-f
. El valor predeterminado es solicitar confirmación solo cuando el destino no se puede escribir. (Este comportamiento se remonta al menos hasta V4 , dondemv
no tomó ninguna opción). Si-i
se da la opción, mv solicitará confirmación cada vez que exista el objetivo. La-f
opción inhibirá preguntar en ambos casos (si ocurre después de cualquiera-i
).fuente
-f
bandera se hubiera utilizado incluso si no se hubiera utilizado .isatty(0)
). Además, si bien es cierto que una-f
anulación posterior-i
, podría no significar que esto es lo mismo que no se dan argumentos.Es útil cuando se establece la ejecución de
mv
un valor predeterminado correcto:Cuando quieras forzar un movimiento, esto funcionará:
Como es la última opción en el comando expandido que cuenta:
Este punto también se menciona en el manual GNU Coreutils .
fuente
alias mv="mv -i"
sea la razón de la existencia de-f
.mv(1)
(y otros comandos de Unix) como "insano" como-i
, creo que cualquiera que haya usado la línea de comandos durante más de unos pocos años ha sido quemadomv
, en un momento u otro.Existe porque (
man mv
)Por lo tanto, puede tener un script / alias / función que siempre pregunta, pero aún puede anular la opción.
Una función / script significativo haría algo más, por supuesto (por ejemplo, registrar la acción).
fuente
alias mv="mv -i"
es la razón de la existencia de-f
. Sin embargo, también mencionas scripts y funciones. ¿Podría dar ejemplos usando estos dos?mv -f
, por lo que todavía no me queda claro cómo justifican / explican su existencia. Lo siento si me estoy perdiendo lo obvio!mv -i
. Si desea usarlos pero omite la interacción, usaríaMV -f
etc.mv
sin ninguna de esas opciones es a veces preguntar (objetivo no escribible e terminal interactivo), por lo que esta sería una clara diferencia entremv -f
y\mv
.El
mv
comando por sí solo puede funcionar de manera diferente con la-f
opción, ya que intentará sobrescribir los archivos protegidos contra escritura sin una solicitud.Debido a los permisos de escritura en el directorio, user2 puede sobrescribir los archivos de user1
./dir/
, pero se le advertirá antes de hacerlo.-f
evita la advertencia.fuente
En la programación de shell, el uso de -f es un idioma común que se utiliza para asegurarse de que sus comandos no se cancelen con errores o solicite al script / usuario una respuesta interactiva al ejecutar ciertos comandos. Lo último que desea es que su script se detenga esperando la entrada del usuario, o quizás peor, para que el comando incorrecto tome la entrada del estándar.
Nota: deshacer un alias puede causar / eliminar efectos secundarios. Si ha aliasado el comando a otra versión o con opciones adicionales, deshacer el alias causará efectos secundarios no deseados. Por ejemplo, puede tener un alias configurado con mv y rm para usar una lata de reciclaje (u otros sistemas de protección / seguimiento). Deshacer el alias romperá esto ...
fuente
-f
opción para cp o mv no garantiza que "funcionen". Por ejemplo, si el permiso es insuficiente, el comando -f no lo hará funcionar. Lo que querías decir es que -f fuerza una sobrescritura sin solicitud. El indicador opuesto -i significa que se requiere interactiva al sobrescribir.isatty(0)
), por lo que, por ejemplo, si su script se ejecuta como parte de una tubería, no se activará. 2.) Agregar-f
no es lo mismo que deshacer-i
porquemv -i -f
difiere demv
, ver la respuesta de Mark .