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.

  • 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 <some files>. If that's really too long then you can alias it alias trash='gio trash'. Commented Apr 21, 2019 at 13:27
  • 1
    @steeldriver I thought of voting to close this as a duplicate of 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? Commented Aug 15, 2019 at 12:21

3 Answers 3


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 

Then in shell prompt you can use:

$ trash file1 file2
  • Don't forget to close shell and open again to make this work
    – LeonidMew
    Commented Apr 21, 2019 at 10:16
  • source ~/.bashrc works too
    – charsi
    Commented Apr 21, 2019 at 10:17
  • 5
    You don't need a loop: trash() { mv "$@" destination; } Commented Apr 21, 2019 at 14:34

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'

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



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

exit 0


alias trash="/path/to/script/trash.sh"

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .