V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
xltfes
V2EX  ›  Linux

在 shell 中替换 rm

  •  
  •   xltfes · 2021-03-04 10:57:44 +08:00 · 3968 次点击
    这是一个创建于 1385 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用 mv 替换 rm 时如果垃圾箱中有相同名称的目录,mv 会报错

    mv: cannot move ***: Directory not empty
    

    在网上找到一个替代方法,改进如下,之前的方案是被注释掉的部分

    rm() {                                                                                                                                            
        #echo $* |sed "s/ /\n/g" |xargs -I {} mv -f {} /home/trash
        tar c $* |(cd /home/trash && tar xf - ); rm -rf $*
    }
    

    但不理解 tar 命令是怎样实现的,在 man 的标准输入输出中也没有见到相关描述,希望大佬解惑

    24 条回复    2021-03-12 11:58:11 +08:00
    yyyb
        1
    yyyb  
       2021-03-04 11:09:10 +08:00
    可以加个时间后缀
    huangmingyou
        2
    huangmingyou  
       2021-03-04 11:13:08 +08:00
    rm 有这么可怕吗 :D
    hlwjia
        3
    hlwjia  
       2021-03-04 11:17:21 +08:00   ❤️ 1
    @huangmingyou 对 rm 不够害怕的只因为命令还敲地不够多
    xltfes
        4
    xltfes  
    OP
       2021-03-04 11:27:54 +08:00
    我一直觉得不用,直到昨天 rm -r ../*

    测试了一下不好使,把 tar 改成 cp 了,但 tar 还是不明白
    在( https://linuxpip.org/fix-directory-not-empty-mv/)的 method 2 看到的 tar 命令
    (cd backup && tar c .) | (cd backupArchives && tar xf -)
    想要"earn more geek points"
    whee1
        5
    whee1  
       2021-03-04 11:32:14 +08:00 via iPhone
    切换有 snapshot 功能的文件系统( btrfs,zfs ),日常使用启动到 snapshot 。
    注意不要随便补全。
    boris93
        6
    boris93  
       2021-03-04 11:37:34 +08:00 via iPhone   ❤️ 2
    替换 rm 是头痛医头脚痛医脚,还会让人降低对 rm 的警惕

    不如 select before delete,删之前,确认目录内容,确认路径,然后再删

    防止出错这种事,要么靠备份,要么靠注意,二者皆有更好
    cianchen
        7
    cianchen  
       2021-03-04 12:06:28 +08:00
    tar c 打包$*(你要删除的文件),(进入到 /home/trash 目录)管道(|) 传递文件流给 tar -xf -,进行解压缩(此时你要删除的文件被解压缩到 /home/trash 目录,可以理解为于 cp),之后调用 rm -rf 直接删除你要删除的文件。
    weixiangzhe
        8
    weixiangzhe  
       2021-03-04 12:16:14 +08:00
    还是用 trash-cli 之类的吧, 删除了还能在 .trash 文件夹里找到
    weixiangzhe
        9
    weixiangzhe  
       2021-03-04 12:18:06 +08:00
    个人 alias 配置
    [img][/img]
    ihipop
        10
    ihipop  
       2021-03-04 12:18:41 +08:00 via Android
    pip install trash cli
    pkookp8
        11
    pkookp8  
       2021-03-04 12:40:43 +08:00 via Android   ❤️ 1
    控制好权限,rm 随便用
    每次都 root,神仙也救不了
    huangmingyou
        12
    huangmingyou  
       2021-03-04 13:08:24 +08:00
    @hlwjia 从 2001 年开始到现在一直用 linux,我 rm 命令敲的应该不算少。
    jzmws
        13
    jzmws  
       2021-03-04 13:43:57 +08:00
    rm 我改成 mv 的
    fo0o7hU2tr6v6TCe
        14
    fo0o7hU2tr6v6TCe  
       2021-03-04 13:47:40 +08:00
    用了两年的 linux
    rm -rf * 经常在用 也就哭了 1 一次 (跑
    scukmh
        15
    scukmh  
       2021-03-04 13:56:37 +08:00
    用了快 5 年 linux 了,一直 root 用户使用,还没误删过东西。
    liuxu
        16
    liuxu  
       2021-03-04 14:47:51 +08:00
    @hlwjia 我敲了快 10 年了感觉还行
    hbolive
        17
    hbolive  
       2021-03-04 15:15:50 +08:00
    我们这运维,都是 root 直接 rm -rf,但愿他没事。。
    libook
        18
    libook  
       2021-03-04 16:37:28 +08:00
    试试 trash-cli
    Jirajine
        19
    Jirajine  
       2021-03-04 16:58:23 +08:00 via Android
    用 grml-zsh 的配置,rm 删除多个文件时有二次确认的提示。
    MeteorCat
        20
    MeteorCat  
       2021-03-04 18:34:32 +08:00 via Android
    rm 改成 mv,还是能预防不少问题的
    icyalala
        21
    icyalala  
       2021-03-04 18:36:41 +08:00
    你这么瞎改,让那些用 rm 的脚本怎么搞?
    xltfes
        22
    xltfes  
    OP
       2021-03-04 21:03:24 +08:00
    已经装了 trash-cli,不用脚本改了,看来不是一句命令可以解决的,还是要自己小心,感谢回复
    no1xsyzy
        23
    no1xsyzy  
       2021-03-05 11:19:40 +08:00
    1. 你传递参数写 $* 要出事。
    λ rm "/home/me/ a file name with space"

    2. 不要低毒化 rm,rm 就是危险品。不要标签上写着 “农药” 的瓶子洗干净装饮用水喝,之后你看到一个装着农药的瓶子你也以为是饮用水喝了。
    你可以把 rm 替换为警告用语,并且不产生任何效果,就好比写着 “农药” 的瓶子装着石头。

    3. 看到个正确方法:闭眼,深呼吸,睁眼,输入 rm 命令,深呼吸,喝一口水,让水份充分流过舌尖,感受,咽下,闭眼,深呼吸,睁眼,检查命令,重复两遍,回车。
    KakuCicada
        24
    KakuCicada  
       2021-03-12 11:58:11 +08:00
    直接线上服务器中 rm -rf 操作了 7 8 年,没出过意外
    这东西还是要看个人警惕性,删除之前再三确认路径 就不用替换
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3372 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:20 · PVG 19:20 · LAX 03:20 · JFK 06:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.