mover arquivos em Linux pode parecer relativamente simples, mas há mais opções disponíveis do que a maioria percebe. Este artigo ensina aos iniciantes como mover arquivos na interface gráfica e na linha de comando, mas também explica o que está realmente acontecendo sob o capô, e aborda as opções da linha de comando que muitos usuários de experiência raramente exploraram.mover o quê?
Antes de mergulhar em arquivos em movimento, vale a pena dar uma olhada mais de perto no que realmente acontece ao mover objetos do sistema de arquivos., Quando um arquivo é criado, ele é atribuído a um inode, que é um ponto fixo em um sistema de arquivos que é usado para o armazenamento de dados. Você pode saber o que o inode mapeia para um ficheiro com o comando ls:
$ ls --inode example.txt
7344977 example.txt
quando você move um ficheiro, você não move os dados de um inodo para outro, você só atribui ao objecto do ficheiro um novo nome ou localização do ficheiro. Na verdade, um arquivo retém suas permissões quando ele é movido, porque mover um arquivo não muda ou recriá-lo.
File and directory inodes never imply inheritance and are dited by the filesystem itself., A atribuição Inode é sequencial baseada em quando o arquivo foi criado e é totalmente independente de como você organizar o seu computador. A file “inside” a directory may have a lower inode number than its parent directory, or a higher one. Por exemplo:
$ mkdir foo
$ mv example.txt foo
$ ls --inode
7476865 foo
$ ls --inode foo
7344977 example.txt
ao mover um arquivo de um disco rígido para outro, no entanto, o inode é muito provável de mudar. Isso acontece porque os novos dados têm que ser escritos em um novo sistema de arquivos. Por esta razão, no Linux o ato de mover e renomear arquivos é literalmente a mesma ação., Se você mover um arquivo para outro diretório ou para o mesmo diretório com um novo nome, ambas as ações são realizadas pelo mesmo programa subjacente.
Este artigo foca-se em mover ficheiros de uma pasta para outra.
movendo-se com um mouse
a interface gráfica é uma camada amigável e, para a maioria das pessoas, familiar de abstração em cima de uma coleção complexa de dados binários. É também a primeira e mais intuitiva forma de mover arquivos no Linux. Se você está acostumado com a experiência desktop, em um sentido genérico, então você provavelmente já sabe como mover arquivos em torno de seu disco rígido., No ambiente de trabalho GNOME, por exemplo, a acção por omissão ao arrastar e largar um ficheiro de uma janela para outra é mover o ficheiro em vez de o Copiar, por isso é provavelmente uma das acções mais intuitivas no ambiente de trabalho:
o Gestor de ficheiros Dolphin no ambiente de trabalho Plasma do KDE é por omissão pedir ao Utilizador uma acção. Manter a tecla Shift carregada enquanto arrasta um ficheiro obriga a uma acção em movimento:
mover na linha de comandos
o comando shell destinado a mover ficheiros no Linux, BSD, Illumos, Solaris e MacOS é mv., Um comando simples e com previsão de sintaxe, mv <fonte> <destino> move um arquivo de origem para o destino especificado, cada uma definida por um absoluto ou relativo caminho do arquivo. Como mencionado anteriormente, mv é um comando comum para usuários do POSIX que muitos de seus modificadores adicionais são geralmente desconhecidos, então este artigo traz alguns modificadores úteis à sua atenção se você é novo ou experiente.,
nem todos os comandos mv foram escritos pelas mesmas pessoas, então você pode ter GNU mv, BSD mv, ou Sun MV, dependendo do seu sistema operacional. As opções de comandos diferem da implementação para a implementação (BSD mv não tem opções longas de todo) por isso, consulte a sua página de man mv para ver o que é suportado, ou instalar a sua versão preferida em vez disso (que é o luxo do open source).,
Mover um ficheiro
Para mover um arquivo de uma pasta para outra com mv, lembre-se a sintaxe mv <fonte> <destino>. Por exemplo, para mover o exemplo de arquivo.txt na sua pasta de documentos:
$ touch example.txt
$ mv example.txt ~/Documents
$ ls ~/Documents
example.txt
tal como quando move um ficheiro, arrastando-o e largando-o num ícone de pasta, este comando não substitui os documentos por exemplo.txt. Em vez disso, o mv detecta que os documentos são uma pasta, e coloca o exemplo.ficheiro txt nele.,
Você também pode, convenientemente, renomeie o arquivo como você movê-lo:
$ touch example.txt
$ mv example.txt ~/Documents/foo.txt
$ ls ~/Documents
foo.txt
isso é importante, pois permite mudar o nome de um arquivo, mesmo quando você não deseja movê-lo para outro local, como por exemplo:
$ touch example.txt$ mv example.txt foo2.txt$ lsfoo2.txt
Mover um diretório
O comando mv não diferencia um arquivo de um diretório, o caminho cp faz., Poderá mover uma pasta ou um ficheiro com a mesma sintaxe:
$ touch file.txt
$ mkdir foo_directory
$ mv file.txt foo_directory
$ mv foo_directory ~/Documents
mover um ficheiro em segurança
se copiar um ficheiro para uma pasta onde já exista um ficheiro com o mesmo nome, o comando mv substitui o ficheiro de destino pelo que está a mover, por omissão. Este comportamento é chamado de bater, e às vezes é exatamente o que você pretende. Outras vezes, não é.
algumas distribuições alias (ou você pode escrever o seu próprio) mv para mv — interactive, o que lhe pede confirmação. Alguns não., De qualquer forma, você pode usar a opção –interactive ou-i para garantir que o mv pede confirmação no caso de dois arquivos do mesmo nome estarem em conflito:
$ mv --interactive example.txt ~/Documents
mv: overwrite '~/Documents/example.txt'?
Se você não quiser intervir manualmente, use –no-clobber ou-N. Esta bandeira rejeita silenciosamente a ação de movimento em caso de conflito. Neste exemplo, um arquivo chamado exemplo.,o txt já existe em ~ / Documents, por isso não é movido do directório actual como indicado:
$ mv --no-clobber example.txt ~/Documents
$ ls
example.txt
movendo-se com cópias de segurança
Se estiver a usar o GNU mv, existem opções de salvaguarda que oferecem outro meio de movimentação segura. Para criar uma cópia de segurança de qualquer ficheiro de destino em conflito, use a opção-b:
$ mv -b example.txt ~/Documents
$ ls ~/Documents
example.txt example.txt~
Esta opção garante que o mv completa a acção em movimento, mas também protege QUALQUER ficheiro pré-existente no local de destino.,
outra opção de backup GNU é –backup, que leva um argumento definindo como o arquivo de backup é nomeado:
- existente: se as cópias de segurança numeradas já existem no destino, então uma cópia de segurança numerada é criada. Caso contrário, o esquema simples é usado.
- none: não cria uma cópia de segurança mesmo que –backup esteja definido. Esta opção é útil para substituir um nome alternativo mv que define a opção de salvaguarda.
- numerado: adiciona o ficheiro de destino com um número.,
- simples: adiciona o ficheiro de destino com um~, que poderá convenientemente ser escondido da sua vista diária com a opção –ignore-backups para o ls.
por exemplo:
pode ser definido um esquema de salvaguarda predefinido com a variável de ambiente VERSION_CONTROL. Você pode definir variáveis de ambiente em seu ~/.o ficheiro bashrc ou dinamicamente antes do seu comando:
a opção –backup ainda respeita a opção –interactive ou-i, por isso ainda o obriga a sobrepor o ficheiro de destino, ainda que crie uma cópia de segurança antes de o fazer:
poderá sobrepor-i com a opção –force ou-F.,
a opção –backup não está disponível no BSD mv.
Mover vários arquivos de uma vez
Quando mover vários arquivos, mv trata o diretório final nomeado como o destino:
$ mv foo bar baz ~/Documents
$ ls ~/Documents
foo bar baz
Se o produto final não é um diretório, mv retorna um erro:
$ mv foo bar baz
mv: target 'baz' is not a directory
A sintaxe do GNU mv é bastante flexível., Se você for incapaz de fornecer o comando mv com o destino como o argumento final, use a opção –target-directory ou opção-t:
$ mv --target-directory=~/Documents foo bar baz
$ ls ~/Documents
foo bar baz
Isto é especialmente útil quando a construção de mv comandos de saída de alguns outros comandos, como o comando find, xargs, ou GNU Paralelo.
movendo – se com base no mtime
com o GNU mv, você pode definir uma ação de movimento com base em se o arquivo a ser movido é mais recente do que o arquivo de destino que ele iria substituir., Esta opção é possível com a opção –update ou-u, e não está disponível no BSD mv:
Este resultado é exclusivamente baseado no tempo de modificação dos arquivos, não em uma diferença entre os dois arquivos, então use-o com cuidado. É fácil enganar mv com um mero comando touch:
obviamente, esta não é a função de atualização mais inteligente disponível, mas oferece proteção básica contra a substituição de dados recentes.
movendo
Existem mais maneiras de mover dados do que apenas o comando mv, mas como o programa padrão para a tarefa, mv é uma boa opção universal., Agora que você sabe que opções você tem disponíveis, você pode usar mv mais inteligente do que nunca.