Em um ambiente de GUI, um arrastar e soltar com substituir substituirá arquivos e diretórios inteiros (incluindo conteúdo) pelo que estiver sendo copiado. Existe uma maneira de obter esse mesmo resultado intuitivo com o comando 'mv'?
fonte
Em um ambiente de GUI, um arrastar e soltar com substituir substituirá arquivos e diretórios inteiros (incluindo conteúdo) pelo que estiver sendo copiado. Existe uma maneira de obter esse mesmo resultado intuitivo com o comando 'mv'?
Não com mv
.
A principal função mv
(apesar do nome) é renomear um objeto. Uma das garantias que o UNIX faz é que as renomeações sejam atômicas - você nunca poderá ver uma renomeação parcialmente concluída. Essa garantia pode ser muito útil se você desejar alterar um arquivo ( /etc/passwd
por exemplo) que outros programas possam estar visualizando e desejar que eles vejam a versão antiga ou nova do arquivo e nenhuma outra possibilidade . Mas uma "renomeação recursiva", como você descreve, quebraria essa garantia - você poderia interrompê-la no meio e teria uma árvore meio movida e provavelmente uma bagunça - e, portanto, não se encaixaria na filosofia de mv
. Esse é o meu palpite sobre o porquê mv -r
não existe.
(Não importa que isso mv
quebre essa filosofia de outras maneiras menores. Por exemplo, mv
na verdade , ele é cp
seguido por rm
ao mover arquivos de um sistema de arquivos para outro.)
Filosofia suficiente. Se você quiser mover recursivamente ("arrastar e soltar") uma árvore de um lugar para outro no mesmo sistema de arquivos , poderá obter a eficiência e a velocidade da mv
seguinte forma (por exemplo):
cp -al source/* dest/ && rm -r source/*
A -l
sinalização para cp
significa "criar um link físico em vez de copiar" - está efetivamente criando um novo nome de arquivo que aponta para os mesmos dados do arquivo antigo. Porém, isso funciona apenas em sistemas de arquivos que suportam links físicos - portanto, qualquer sistema de arquivos UNIX-ish nativo é bom, mas não funciona com o FAT.
Os &&
meios "somente executam o seguinte comando se o comando anterior tiver êxito". Se desejar, você pode executar os dois comandos, um de cada vez.
Não acho que você possa replicar o comportamento de arrastar e soltar com o qual está descrevendo
mv
, pois os subdiretórios não vazios no destino não serão substituídos.Talvez
rsync
? Algo comorsync -a -r source/ target/
? Execute com o-v -n
para executar um teste seco detalhado primeiro para garantir que ele faça o que você deseja.fonte
mv -f /path/to/source/folder/* /destination/folder/
Irá mover tudo em / path / to / source / folder, incluindo arquivos e diretórios para / destination / folder.
E substituirá arquivos e diretórios existentes.
fonte
Você provavelmente vai querer alterar a resposta correta para isso:
https://github.com/iaindooley/pickdrop
Exemplo:
diga que tenho:
e quero mover essas coisas para / site
assim parece:
Eu posso ir:
Isso é literalmente recortar e colar.
fonte