Movido acidentalmente a pasta inicial?

6

Não sei bem o que aconteceu, tudo o que fiz foi correr:

~/Desktop$ mv sublime.desktop \~/.local/share/applications/

O sinal \ antes de ~/.local aparecer como preenchimento automático, então achei que não havia problema em executá-lo.

Mas, em vez de mover o arquivo da área de trabalho para /.local/share/applications/ (que era minha intenção), o comando criou uma nova pasta no Desktop. (A pasta ~ foi)

Liso@thinkpad:~/Desktop$ ls
~  backup.sql  Apps

Quando tentei remover ~ :

~/Desktop$ rmdir ~
rmdir: failed to remove ‘/home/liso’: Permission denied

Então, o que estou perdendo, na verdade?

EDITAR

@Ravexina me pediu para executar o comando test para confirmar se era um diretório ou um arquivo.

Liso@thinkpad:~/Desktop$ test -d \~ && echo "it's a dir"
it's a dir'
    
por iTux 15.08.2017 / 11:25

3 respostas

10

Você não moveu seu diretório pessoal ...

  • Nos referimos a ~ como expansão de til, na maioria das vezes ele será substituído pelo valor da variável shell $HOME , antes de o comando ser executado.

  • \ é o tipo mais strong de citando no shell.

Portanto, usando \~ , você está ignorando a expansão do til, citando-a. Significa que você está realmente dizendo: mova o "sublime.desktop" para um novo arquivo chamado exatamente "~ ...".

Eu não consigo reproduzir o resultado do seu comando, mas de alguma forma você acabou com um arquivo / diretório exatamente com o nome ~ .

Verifique se é um arquivo ou diretório e obtenha uma lista de seu conteúdo:

test -d ~/Desktop/~ && ls -l ~/Desktop/~ || echo 'it is a file'

Em seguida, mova-os para o caminho correto, se for um arquivo para movê-lo de volta, você terá que escapar do nome dele novamente. Caso contrário, ele será expandido para /home/liso :

mv \~ new-name
mv "~" new-name # works
mv '~' new-name # also works
mv ~/Desktop/~  new-name # works fine too

E lembre-se de que rmdir ~ está tentando remover o diretório pessoal real: /home/liso não é o ~ .

    
por Ravexina 15.08.2017 / 11:56
6

O til é expandido pelo shell para o $ HOME do usuário, no seu caso /home/liso . No primeiro comando, você escapou do ~ , portanto, ele não foi expandido para o local desejado, em vez disso, ele foi passado literalmente para mv como o símbolo ~ .

Eu acho que você queria correr

mv sublime.desktop ~/.local/share/applications

(com um / à direita opcional)

Espero que o comando que você diz que você correu a falhar assim

mv: cannot move 'sublime.desktop' to '~/.local/share/applications/': No such file or directory

porque mv não cria diretórios de destino como esse. Se você realmente executou esse comando, acho que você já deve ter um diretório chamado ~ no seu Desktop com esse caminho, ou seja,

/home/liso/Desktop/\~/.local/share/applications

e se for assim, você encontrará um arquivo lá:

~/Desktop/\~/.local/share/applications/sublime.desktop

E você deve correr

mv ~/Desktop/\~/.local/share/applications/sublime.desktop ~/.local/share/sublime.desktop

Mas se você executou

mv sublime.desktop \~

que criaria um arquivo ~ porque sublime.desktop seria renomeado ~ . Tente ler o arquivo

less ~Desktop/\~

Se ele contiver o conteúdo do seu arquivo sublime.desktop , execute

mv \~ ~/.local/share/applications/sublime.desktop
    
por Zanna 15.08.2017 / 12:03
2

O caractere til só é expandido para o seu diretório pessoal (entre outras possibilidades) quando não é citado. Colocar um caractere \ na frente impede a expansão do til. Em caso de dúvida, use $HOME , pois é uma variável de shell regular com uma sintaxe e comportamento previsíveis.

Para remover um diretório chamado ~ (certifique-se de que não há nada de importante nele primeiro), você deve usar o mesmo truque de antes: escape do til para que seja interpretado literalmente. Ah, e você também precisará executar rm recursivamente para remover um diretório não vazio:

rm -r "~"
    
por Dmitry Grigoryev 15.08.2017 / 16:25