Comando para mover um arquivo para o lixo via terminal

104

Eu gostaria de saber se há um comando que eu possa emitir em um terminal, então eu não removo ( rm ) o arquivo, mas movo-o para a lixeira (por exemplo, comportamento Nautilus Move to Trash).

Caso haja tal comando, eu também estaria interessado em saber o que é.

    
por Rasmus 06.11.2012 / 09:46

6 respostas

94

Você pode usar o comando gvfs-trash do pacote gvfs-bin , que é instalado por padrão no Ubuntu.

Mover arquivo para o lixo:

gvfs-trash filename

Veja o conteúdo da lixeira:

gvfs-ls trash://

Esvazie a lixeira:

gvfs-trash --empty
    
por Radu Rădeanu 17.09.2014 / 08:21
61

Instale trash-cli -sudoapt-getinstalltrash-cli

Colocararquivosnalixeiracom:trash file1 file2

Listar arquivos na lixeira: trash-list

Esvaziar lixeira com: trash-empty

    
por user55822 06.11.2012 / 10:12
12

A partir de 2017, gvfs-trash parece estar obsoleto.

$ touch test
$ gvfs-trash test
This tool has been deprecated, use 'gio trash' instead.
See 'gio help trash' for more info.

Você deve usar gio , especificamente

gio trash

é o caminho recomendado.

    
por Eugen Tverdokhleb 29.10.2017 / 11:49
2

Eu gosto das formas de baixa tecnologia, as melhores. Eu fiz uma pasta .Tr no meu diretório pessoal digitando:

mkdir ~/.Tr

e, em vez de usar rm para excluir arquivos, movo esses arquivos para o diretório ~/.Tr digitando:

mv fileName ~/.Tr

Esta é uma maneira eficaz e simples de manter o acesso aos arquivos que você acha que não quer com o benefício adicional no meu caso de não mexer nas pastas do sistema, pois meus níveis de conhecimento do Ubuntu são bastante baixos e me preocupo com o que Eu posso estar estragando quando eu mexer com coisas do sistema. Se você também é de baixo nível, por favor, note que o "." no nome do diretório faz com que seja um diretório oculto.

    
por user2981989 25.09.2015 / 19:29
1

Aqui está uma versão baseada em nodejs (se você quer saber, o que acontece sob o capô ou precisa disso em um projeto), que também tem suporte a linha de comando (se você está feliz, se ele simplesmente funciona.

> trash pictures/beach.jpg
    
por Frank Nocke 15.08.2017 / 19:44
1

Uma resposta anterior menciona o comando gio trash , que está bem até onde vai. No entanto, nas máquinas servidoras, não há equivalente de um diretório de lixeira. Eu escrevi um script Bash que faz o trabalho; em máquinas de desktop (Ubuntu), ele usa gio trash . (Adicionei alias tt='move-to-trash' ao meu arquivo de definições de alias; tt é um mnemônico para "lixeira".)

#!/bin/bash
# move-to-trash

# Teemu Leisti 2018-07-08

# This script moves the files given as arguments to the trash directory, if they
# are not already there. It works both on (Ubuntu) desktop and server hosts.
#
# The script is intended as a command-line equivalent of deleting a file from a
# graphical file manager, which, in the usual case, moves the deleted file(s) to
# a built-in trash directory. On server hosts, the analogy is not perfect, as
# the script does not offer the functionalities of restoring a trashed file to
# its original location nor of emptying the trash directory; rather, it is an
# alternative to the 'rm' command that offers the user the peace of mind that
# they can still undo an unintended deletion before they empty the trash
# directory.
#
# To determine whether it's running on a desktop host, the script tests for the
# existence of directory ~/.local/share/Trash. In case it is, the script relies
# on the 'gio trash' command.
#
# When not running on a desktop host, there is no built-in trash directory, so
# the first invocation of the script creates one: ~/.Trash/. It will not
# overwrite an existing file in that directory; instead, in case a file given as
# an argument already exists in the custom trash directory, the script first
# appends a timestamp to the filename, with millisecond resolution, such that no
# existing file will be overwritten.
#
# The script will not choke on a nonexistent file. It outputs the final
# disposition of each argument: does not exist, was already in trash, or was
# moved to the trash.


# Exit on using an uninitialized variable, and on a command returning an error.
# (The latter setting necessitates appending " || true" to those arithmetic
# calculations that can result in a value of 0, lest bash interpret the result
# as signalling an error.)
set -eu

is_desktop=0

if [[ -d ~/.local/share/Trash ]] ; then
    is_desktop=1
    trash_dir_abspath=$(realpath ~/.local/share/Trash)
else
    trash_dir_abspath=$(realpath ~/.Trash)
    if [[ -e $trash_dir_abspath ]] ; then
        if [[ ! -d $trash_dir_abspath ]] ; then
            echo "The file $trash_dir_abspath exists, but is not a directory. Exiting."
            exit 1
        fi
    else
        mkdir $trash_dir_abspath
        echo "Created directory $trash_dir_abspath"
    fi
fi

for file in "$@" ; do
    file_abspath=$(realpath -- "$file")
    file_basename=$( basename -- "$file_abspath" )
    if [[ ! -e $file_abspath ]] ; then
        echo "does not exist:   $file_abspath"
    elif [[ "$file_abspath" == "$trash_dir_abspath"* ]] ; then
        echo "already in trash: $file_abspath"
    else
        if (( is_desktop == 1 )) ; then
            gio trash "$file_abspath" || true
        else
            move_to_abspath="$trash_dir_abspath/$file_basename"
            while [[ -e "$move_to_abspath" ]] ; do
                move_to_abspath="$trash_dir_abspath/$file_basename-"$(date '+%Y-%m-%d-at-%H:%M:%S.%3N')
            done
            # While we're reasonably sure that the file at $move_to_abspath does not exist, we shall
            # use the '-f' (force) flag in the 'mv' command anyway, to be sure that moving the file
            # to the trash directory is successful even in the extremely unlikely case that due to a
            # run condition, some other thread has created the file $move_to_abspath after the
            # execution of the while test above.
            /bin/mv -f "$file_abspath" "$move_to_abspath"
        fi
        echo "moved to trash:   $file_abspath"
    fi
done
    
por Teemu Leisti 26.06.2018 / 15:05