Criando alias para a lixeira

7

Eu sou um novato. Eu defino um alias no arquivo .bashrc da seguinte forma.

alias myrm='mv /home/user/Trash/*'

O propósito é que quando eu uso o comentário myrm, por exemplo $ myrm foo, o arquivo "foo" deve ser movido para a pasta Lixeira que está na minha pasta pessoal (/ home / user / Trash).

Então eu fiz

$source ~/.bashrc

Depois disso, quando tento usar o myrm digitando $ myrm foo, recebo a seguinte mensagem de erro.

mv: cannot stat ‘/home/user/Trash/*’: No such file or directory

Como este problema pode ser resolvido?

    
por phenomenon 22.09.2017 / 07:42

6 respostas

17

Primeiro de tudo, você não usa $ quando liga para um alias. $ é para expandir uma variável (e algumas outras coisas que não são particularmente relevantes para esta questão).

Mas, em segundo lugar, os aliases funcionam um pouco como variáveis, no sentido de que eles (com o risco de simplificar um pouco) basta expandir para um monte de palavras. Você diz que quer fazer myrm foo , mas isso se expandiria para mv /home/user/Trash/* foo , o que não faz sentido.

Uma solução simples seria para definir o alias como mv -t /home/user/Trash , que funcionaria porque mv suporta o

Sintaxe
mv -t destination_dir  file
como alternativa ao

sintaxe
mv filedestination_dir
.

Mas você pode obter maior flexibilidade com uma função de shell. Estes combinam a flexibilidade de scripts com a sobrecarga (baixa) de aliases. Por exemplo,

myrm() { mv "$@" /home/user/Trash; }

fará com que myrm foo seja interpretado como mv foo /home/user/Trash .

    
por 22.09.2017 / 08:02
7

Provavelmente a solução mais fácil é usar trash-cli package. Então você pode apenas fazer alias myrm=trash e, em seguida, trash foo para realizar o que deseja. Exceto que foo irá agora para ~/. local/share/Trash

    
por 22.09.2017 / 08:28
4

O problema é que, com mv , você precisa usá-lo como mv source destination .

Com seu alias, é vice-versa mv destination source .

Além disso, você não precisa do asterisco * no final, porque funciona com o destino como uma pasta. Certifique-se de que sua pasta /home/user/Trash exista com mkdir /home/user/Trash .

Para resolver sua ideia de alias, recomendo que você veja estas perguntas sobre o stackoverflow:

Isso levará a essa solução; por favor adicione isto ao seu ~/.bashrc e faça um source ~/.bashrc depois de adicionar:

myrm() {
 /bin/mv "$@" /home/user/Trash/
}
    
por 22.09.2017 / 07:51
2

Conforme declarado nos comentários, a sintaxe mv é diferente da que você pode fazer:

myrm(){ mv "$@" $HOME/Trash/; }

que pode manipular vários arquivos como argumento

No entanto, esse alias simples não manipula a colisão de nomes de arquivos, bem como metadados (de onde foram removidos, ...).

Para uma solução mais completa, você pode simplesmente usar o pacote trash-cli , que é muito bom e vem com poucas ferramentas (por exemplo, arquivos vazios que estão na lixeira por X dias, ...).

    
por 22.09.2017 / 07:56
1

Há outro alias útil que você poderia considerar se tiver o pacote gvfs-bin instalado em seu host:

alias myrm='gvfs-trash'

Move seus arquivos para o lixo. Além disso, os arquivos apropriados são gravados em sua pasta $ TRASH (como info/ , files/ ...). Então você não precisa se preocupar por isso. Exemplo: entrar no lixo e clicar em restore funcionará perfeitamente.

Isso é redundante com trash-cli , mas seu host pode ter apenas um deles já instalado, por isso, se você não tiver o trash-cli, experimente.

    
por 22.09.2017 / 16:23
0

Você precisa fazer

mv "$1" /home/user/Trash/
ou
mv -t /home/user/Trash/
em vez de
mv /home/user/Trash/
Manpage aqui     
por 22.09.2017 / 17:22