O que aconteceu com o arquivo quando eu digitei “mv file.txt ../”?

2

Eu queria mover a pasta 'file.txt' para cima, mas em vez de mv file.txt ../file.txt , digitei mv file.txt ../ .

Agora o arquivo sumiu e não recebi nenhuma mensagem de erro. Então parece que alguma ação foi feita com sucesso. Mas o que aconteceu aqui?

Eu tenho backups, pelo menos isso não é problema. Mas eu gostaria de entender o que fiz e se mudei alguma coisa ou se esse arquivo desapareceu magicamente.

    
por unor 02.04.2013 / 18:15

3 respostas

5

O arquivo foi movido para o diretório pai atual daquele em que você estava, em vez do diretório pai do symlink que você seguiu para chegar lá. Por padrão, cd se comporta de maneira diferente de ls ou mv ao encontrar .. . O cd apenas sobe no caminho, efetivamente invertendo os links simbólicos, enquanto os outros vão para o pai real do diretório em que estão, independentemente de como você chegou lá.

Imagine uma árvore de diretórios como essa ( ~ é o diretório inicial e shortcut é um link simbólico para maindir/subdir ):

~
├── maindir/
│   └── subdir/
│       └── file.txt
└── shortcut -> maindir/subdir/

Se você simplesmente cd a ~/shortcut , então ls mostrará file.txt e pwd mostrará ~/shortcut . No entanto , enquanto a saída de pwd está correta de acordo com o symlink que você seguiu para chegar lá, você está realmente ("fisicamente", se quiser) em ~/maindir/subdir . ls e mv estão cientes disso, então mv file.txt .. moverá file.txt para o diretório pai real: ~/maindir , em vez de ~ conforme o esperado.

Você pode fazer com que cd se comporte como os outros usando a opção -P . Portanto, se você estiver no diretório em que originalmente executou o comando mv de ( ~/shortcut ) e executar cd -P .. , ele será direcionado para o diretório pai real (por exemplo, ~/maindir ), e você poderá encontrar file.txt lá com um simples ls file.txt . (Você também pode acessar o diretório atual com cd -P . .)

    
por 02.04.2013 / 18:21
4

mv file.txt .. e mv file.txt ../file.txt têm exatamente o mesmo efeito. Há uma distinção sutil em mv :

  • Se o último argumento for um diretório (aqui .. ), você poderá inserir várias fontes e elas serão movidas para o destino com o (s) mesmo (s) nome (s)
  • Se o último argumento não é um diretório (é um arquivo ou não existe), a fonte single é movida para lá.

Então, se dir é um diretório:

mv file1 file2 file3 dir  # Moves the files there
mv file dir               # Moves one file
mv file dir/newname       # Moves file, new name
mv file newfile           # Just renames
    
por 02.04.2013 / 18:31
3

mv file.txt ../ é um comando completamente legítimo: você disse ao kernel para mover o nome de um arquivo para o diretório pai do diretório atual. file.txt não deve ter desaparecido, ele ainda deve aparecer no pai de qualquer diretório que você tenha emitido o comando.

É possível que as circunstâncias modifiquem o que acontece. Por exemplo, se ../file.txt já existia, seu conteúdo agora é o de ./file.txt e o que quer que ../file.txt continha anteriormente foi excluído.

    
por 02.04.2013 / 18:19