Các câu trả lời trước đề cập đến các lệnh trash-cli
và rmtrash
. Không có cái nào được tìm thấy theo mặc định trên Ubuntu 18.04, nhưng lệnh gio
này là. gio help trash
Đầu ra chỉ huy :
Usage:
gio trash [OPTION…] [LOCATION...]
Move files or directories to the trash.
Options:
-f, --force Ignore nonexistent files, never prompt
--empty Empty the trash
Tôi đã thử nghiệm bằng cách sử dụng gio trash FILENAME
trên dòng lệnh và nó hoạt động giống như tôi đã chọn tệp trong trình duyệt tệp và nhấp vào nút DEL: tệp được chuyển đến thư mục Thùng rác của máy tính để bàn. (Lệnh không nhắc xác nhận mặc dù tôi không sử dụng -f
tùy chọn.)
Xóa các tệp theo cách này là có thể đảo ngược, trong khi thuận tiện hơn là xác định lại rm
để rm -i
đảm bảo an toàn và phải xác nhận từng thao tác xóa, điều này vẫn khiến bạn không gặp may nếu bạn vô tình xác nhận việc xóa mà bạn không nên xóa.
Tôi đã thêm vào alias tt='gio trash'
tập tin định nghĩa bí danh của tôi; tt
là một bản ghi nhớ cho Thùng rác.
Đã thêm vào chỉnh sửa vào 2018-06-27: Trên các máy chủ, không có thư mục rác tương đương. Tôi đã viết kịch bản Bash sau đây thực hiện công việc; trên các máy tính để bàn, nó sử dụng gio trash
và trên các máy khác, di chuyển (các) tệp được cung cấp dưới dạng tham số vào thư mục rác mà nó tạo. Script được cập nhật vào 2019-09-05.
#!/bin/bash
#
# move-to-trash
#
# Teemu Leisti 2019-09-05
#
# This script moves the files given as arguments to the trash directory, if they
# are not already there. It works both on (Gnome) 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 functionality of restoring a trashed file to its
# original location, nor that of emptying the trash directory; rather, it offers
# an alternative to the 'rm' command, giving the user the peace of mind that
# they can still undo an unintended deletion before emptying the trash
# directory.
#
# To determine whether it's running on a desktop host, the script tests for the
# existence of the gio utility and of directory ~/.local/share/Trash. In case
# both exist, the script relies on the 'gio trash' command. Otherwise, it treats
# the host as a server.
#
# There is no built-in trash directory on server hosts, so the first invocation
# of the script creates directory ~/.Trash/, unless it already exists.
#
# The script appends a millisecond-resolution time stamp to all the files it
# moves to the trash directory, both to inform the user of the time of the
# deletion, and to avoid overwrites when moving a file to trash.
#
# 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 trash.
gio_command_exists=0
command -v gio > /dev/null 2>&1
if (( $? == 0 )) ; then
gio_command_exists=1
fi
# Exit on using an uninitialized variable, and on a command returning an error.
# (The latter setting necessitates appending " || true" to those arithmetic
# calculations and other commands that can return 0, lest the shell interpret
# the result as signalling an error.)
set -eu
is_desktop=0
if [[ -d ~/.local/share/Trash ]] && (( gio_command_exists == 1 )) ; 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
# The name of the moved file shall be the original name plus a
# millisecond-resolution timestamp.
move_to_abspath="$trash_dir_abspath/$file_basename-$(date '+%Y-%m-%d-at-%H-%M-%S.%3N')"
while [[ -e "$move_to_abspath" ]] ; do
# Generate a new name with a new timestamp, as the previously
# generated one denoted an existing file.
move_to_abspath="$trash_dir_abspath/$file_basename-$(date '+%Y-%m-%d-at-%H-%M-%S.%3N')"
done
# We're now almost certain that the file denoted by name
# $move_to_abspath does not exist, as for that to be the case, an
# extremely unlikely run condition would have had to take place:
# some other process would have had to create a file with the name
# $move_to_abspath after the execution of the existence test above.
# However, to make absolute sure that moving the file to the trash
# directory will always be successful, we shall give the '-f'
# (force) flag to the 'mv' command.
/bin/mv -f "$file_abspath" "$move_to_abspath"
fi
echo "moved to trash: $file_abspath"
fi
done
gvfs-trash
trước đây, nhưng chưa bao giờ có nhu cầu khôi phục từ dòng lệnh cho đến khi bạn khơi dậy sự tò mò của tôi. Câu trả lời cho câu hỏi liên kết có thể giúp đỡ.