Tenía la costumbre de usarlo mv directory1 directory2/
pensando que si escribía mal el nombre directory2
fallaría y me advertiría que el directorio no existía. Resulta que ese no es el caso.
¿Existe una forma sencilla de lograr esto? (Un error cuando el directorio de destino no existe).
Respuesta1
mv -t directory2/ directory1
Deman 1 mv
:
mv [OPTION]... -t DIRECTORY SOURCE...
-t
,--target-directory=DIRECTORY
mueva todosSOURCE
los argumentos aDIRECTORY
Sin embargo, POSIX no requiere esta opción. Puede mv
que lo apoyes o no.
Ejemplo:
$ ls
$ # Nothing here so far
$ mkdir foo bar
$ # Let's move foo to bar/
$ mv -t baz/ foo # Oops, a typo, with -t
mv: failed to access 'baz/': No such file or directory
$ mv foo baz/ # Oops, a typo, without -t
$ ls
bar baz
$
Respuesta2
Si está utilizando bash
y su mv
comando no admite la -t
opción que no es POSIX, aún puede definir una función mvdir
en su .bashrc
archivo como esta:
mvdir() {
if [ -d "$2" ]
then
mv "$1" "$2"
else
printf 'mvdir: "%s" does not exist, or is not a directory\n' "$2" >&2
return 1
fi
}
Con esa definición de función implementada, puedes decir:
mvdir directory1 directory2
En una forma más compacta, el comando central de esta función es:
( [ -d directory2 ] && mv directory1 directory2 )
Esa lógica se expande ligeramente en la función para que sea más claro presentar un mensaje de error en el caso de que el directorio2 no exista o no sea un directorio. Si el directorio de destino existe, mv
se ejecutará y cualquier mensaje de error o código de resultado será generado por mv
. Si el directorio no existe, printf
se escribirá un diagnóstico stderr
y la función devolverá un código de resultado distinto de cero para indicar un error.
Para probar, comience en un directorio vacío:
$ find *
find: *: No such file or directory
$ mkdir A
$ find *
A
$ mvdir A B || echo fail
mvdir: "B" does not exist, or is not a directory
fail
$ mkdir B
$ find *
A
B
$ mvdir A B || echo fail
$ find *
B
B/A