用gio替代rm命令,将要删除的东西先移入回收站
被删除的文件位于: .local/share/Trash, 恢复的话,需要自己去目录手动拷贝回原位置,如何得到原位置,查看 .local/share/Trash/info 目录下的信息文件。
For Ubuntu 18.04 and newer, use gio
. For older versions, use gvfs-ls
and gvfs-trash
.
To read the trash:
gio list trash:// gvfs-ls trash://
To send files or directories to the trash (支持 * 通配符):
gio trash [FILE or FILES or DIR or DIRS]
gvfs-trash [FILE or FILES or DIR or DIRS]
To empty it:
gio trash --empty
gvfs-trash --empty
可以将 rm 重新定义,定义如下:
(该代码无法删除 ./ 和 ../ 、../../ 、 ../../../ 等目录,也无法删除 ../file、 ../../file 等目录或文件,若要删除这些,请用 gio trash,不过要小心,因为 gio trash 真的可以将目录移动到 trash里,不管你任何时候操作,别大意将 home 目录移动到trash里了,不过也没关系,trash并不会删除文件。)
(它也会将所有参数全部忽略,即会将 -r -rf -file 都忽略,因此删除的文件若第一个字符本来就是 -, 则必须用 gio trash 来移入回收站。)
function rm --description 'vote each account of eosnameswaps' if test (count $argv) -lt 1 return 0 end # for a in $argv[1..-1] # if test $a = "." # echo "no" # return 1 # end # end for i in (seq (count $argv)) if test $argv[$i] = "." echo "do not delete ./" return 1 end if test $argv[$i] = "./" echo "do not delete ./" return 1 end switch $argv[$i] case "*..*" echo "do not delete ../ or ../../ or ../file etc." return 1 case "-*" set argv[$i] "" end end # if test (count $argv) -lt 2 -o "$argv[1]" = "--help" # echo "" # end echo "move it/them to trash." gio trash $argv end
另外:
1、对于不同磁盘,gio 会在每一个磁盘上新建一个 trash-* 的暂存目录(系统所在的磁盘在目录: ~/.local/share/Trash )。
2、其实 trash-cli 这个工具软件集更好用,因为它不但可以分别在不同的disk磁盘上使用各自独立的暂存目录,还能将里面暂存的文件列表出来,还能通过命令恢复这些暂存文件。而gio现在并不能很好的列表暂存文件,也不能通过gio命令恢复这些文件。
trash-cli 安装使用示例:
$ sudo apt-get install trash-cli
$ trash-put file1 file2 dir1 dir3 $ trash-list $ trash-restore # 它会打印出垃圾箱里的所有文件,让你选择恢复哪一个 $ trash-rm file1 file2 #将垃圾箱里的文件永久删除 $ trash-empty # 清空垃圾箱 $ trash-empty 10 # 清空10天前移入垃圾箱的所有文件,即保留最近10天删除的
新建一个 .config/fish/functions/fj.fish 文件:
function fj --description 'move files/dirs to trash can' trash-put $argv end
可以使用 fj 代替 trash-put 来将文件移入垃圾桶。
支付宝扫一扫捐赠
微信公众号: 共鸣圈
欢迎讨论,邮件: 924948$qq.com 请把$改成@
QQ群:263132197
QQ: 924948