Eu tinha o hábito de mv directory1 directory2/
pensar que se digitasse errado o nome directory2
ele falharia e me avisaria que o diretório não existia. Acontece que esse não é o caso.
Existe uma maneira simples de conseguir isso? (Uma falha quando o diretório de destino não existe).
Responder1
mv -t directory2/ directory1
Deman 1 mv
:
mv [OPTION]... -t DIRECTORY SOURCE...
-t
,--target-directory=DIRECTORY
mova todos osSOURCE
argumentos paraDIRECTORY
Esta opção não é exigida pelo POSIX. Você mv
pode ou não apoiá-lo.
Exemplo:
$ 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
$
Responder2
Se você estiver usando bash
e seu mv
comando não suportar a -t
opção não POSIX, você ainda poderá definir uma função mvdir
em seu .bashrc
arquivo 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
}
Com essa definição de função definida, você pode dizer:
mvdir directory1 directory2
De uma forma mais compacta, o comando central desta função é:
( [ -d directory2 ] && mv directory1 directory2 )
Essa lógica é ligeiramente expandida na função para tornar mais fácil apresentar uma mensagem de erro no caso em que o diretório2 não existe ou não é um diretório. Se o diretório de destino existir, mv
será executado e qualquer mensagem de erro ou código de resultado será gerado por mv
. Se o diretório não existir, printf
um diagnóstico será gravado stderr
e a função retornará um código de resultado diferente de zero para indicar um erro.
Para testar, inicie em um diretório vazio:
$ 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