Ao mover um diretório para outro diretório, existe uma maneira simples de gerar uma falha quando o diretório de destino não existe?

Ao mover um diretório para outro diretório, existe uma maneira simples de gerar uma falha quando o diretório de destino não existe?

Eu tinha o hábito de mv directory1 directory2/pensar que se digitasse errado o nome directory2ele 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 os SOURCEargumentos paraDIRECTORY

Esta opção não é exigida pelo POSIX. Você mvpode 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 bashe seu mvcomando não suportar a -topção não POSIX, você ainda poderá definir uma função mvdirem seu .bashrcarquivo 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, mvserá executado e qualquer mensagem de erro ou código de resultado será gerado por mv. Se o diretório não existir, printfum diagnóstico será gravado stderre 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

informação relacionada