4

I would like to create an alias for the move command -

trash='mv <some files> /home/$USER/.local/share/Trash/files'

How do I make this work?

I want the destination to always be the same. But I want to be able to pass the files to be moved.

charsi
  • 323
  • 2
  • 9
  • 4
    There is already a command-line interface to the trash: in 18.04 it's `gio trash` (in earlier versions of Ubuntu, `gvfs-trash`) i.e. you can just type `gio trash `. If that's really too long then you can alias it `alias trash='gio trash'`. – steeldriver Apr 21 '19 at 13:27
  • 1
    @steeldriver I thought of voting to close this as a duplicate of [Can I pass arguments to an alias command?](https://askubuntu.com/questions/626458/can-i-pass-arguments-to-an-alias-command) but I think your comment is really the best answer to the question here (and so it's not a duplicate of that). Would you consider posting it as an answer? – Eliah Kagan Aug 15 '19 at 12:21

3 Answers3

10

Use function instead of alias, defined in .bashrc

nano ~/.bashrc 

# put inside .bashrc:
trash() { 
  for item in "$@" ; do
    echo "Trashing: $item" 
    mv "$item" /home/$USER/.local/share/Trash/files 
  done
}

Then in shell prompt you can use:

$ trash file1 file2
LeonidMew
  • 2,724
  • 1
  • 20
  • 38
5

You can only append arguments to an alias. Fortunately, mv allows you to do this, with the -t option

alias trash='mv -t ~/.local/share/Trash/files'
glenn jackman
  • 17,625
  • 2
  • 37
  • 60
0

You can also create a bash script and run that script with an alias.

trash.sh:

#!/bin/sh

for arg in $*; do
    mv $arg /home/$USER/.local/share/Trash/files
done

exit 0

.bashrc:

alias trash="/path/to/script/trash.sh"
CPH
  • 368
  • 2
  • 9