yanw
V2EX  ›  macOS

执行一条命令,把根目录给删了。

  •  
  •   yanw · Nov 22, 2015 · 4481 views
    This topic created in 3998 days ago, the information mentioned may be changed or developed.

    我是在移动硬盘一个 fat32 分区里面( cd /Volumes/fat32 ),想删除某个文件夹内以 "._" 开头的文件,然后就执行了以下命令:

    sudo find . -name "._*" -exec rm -rf {} \;
    

    等待的时间比较长,就想着去别的目录( /data )干点事,然后发现 /data 目录不见了!!然后 cd /,发现 / 也不见了!!

    结果就是我用 time machine 恢复到昨天的版本了(今天 time machine 没跑)。

    问题来了,这条命令出啥问题了?之前在 Linux 下用过这命令没问题啊。命令应该没输错,我是复制的。

    24 replies  •  2015-11-24 16:46:51 +08:00
    xuyinan503
    xuyinan503
    Nov 22, 2015❤️1
    1
    没找到 ._开头的文件,得到空

    然后就执行了 rm -rf ?
    crayygy
    crayygy
    Nov 22, 2015❤️1
    2
    不要乱执行 rm -rf ,任何时候再执行这个操作的时候都应该三思
    hicdn
    hicdn
    Nov 22, 2015❤️6
    3
    批量删除一般都是 ls|find|grep 重定向 /tmp/xx.txt
    确认一遍后再 cat /tmp/xx.txt|xargs rm -rf
    Tiande
    Tiande
    Nov 22, 2015❤️1
    4
    @hicdn 同意谨慎 rm
    然而这条命令到底哪里错了?
    wolfan
    wolfan
    Nov 22, 2015 via Android❤️1
    5
    … 我好像一直在用这条命令删东西,到现在还没出过事真是感动啊😉
    hicdn
    hicdn
    Nov 22, 2015❤️1
    6
    @dtdnqsb 没发现哪里有错啊
    v1024
    v1024
    Nov 22, 2015❤️1
    7
    骚年,用 trash 保平安。
    cxh116
    cxh116
    Nov 22, 2015❤️1
    8
    看命令本身没有问题. 有可能是 bsd 的命令行 bug.
    碰到几次用 7z 解压 zip 出来乱码.然后用 ls grep xargs 等命令组合起来就是删除不掉.总是有字符转义问题.
    有可能是你的要删除掉的文件名有一些特殊字符,最终某行被解析成 rm -rf /.

    rm -rf 别乱用 sudo.更别乱 su - root 执行 rm -rf
    yanw
    yanw
    OP
    Nov 22, 2015
    9
    @hicdn 新技能 Get ,感谢。

    @crayygy 谨慎是对的, 3 楼的方法就很赞。

    @dtdnqsb
    @wolfan
    @hicdn
    @xuyinan503

    不知道是不是因为在 fat32 分区下执行的命令?可是我在 fat32 下执行 find . -name "._*" 得到的文件确实是想得到的。

    复制过来的命令是 sudo find / -name "._*" -exec rm -rf {} \; 我把 / 改成 . 了,难道是改错,改成 sudo find / -name "/*" -exec rm -rf {} \; 了?感觉犯这个错的可能性还是挺低的。
    cxh116
    cxh116
    Nov 22, 2015❤️1
    10
    @cxh116 可以在 mac 下运行这样的命令测试

    cd /tmp/
    touch "a b"
    find . -name "a b"| xargs rm

    报这样的错

    rm: ./a: No such file or directory
    rm: b: No such file or directory
    yanw
    yanw
    OP
    Nov 22, 2015
    11
    @v1024 几百个文件以 "._" 开头,必须命令行操作的,不过 rm 操作改成 mv 操作倒是可行。
    cxh116
    cxh116
    Nov 22, 2015
    12
    @cxh116 测试了一下,linux 也有此问题.应该是用法不对,特殊字符需要加特殊参数对待.

    http://stackoverflow.com/questions/16758525/use-xargs-with-filenames-containing-whitespaces
    kn007
    kn007
    Nov 22, 2015
    13
    @yanw 我觉得 3 楼方法相对可靠
    crayygy
    crayygy
    Nov 22, 2015
    14
    其实 Adobe 才是真正的防 rm -rf 利器 :doge
    lululau
    lululau
    Nov 22, 2015 via iPhone❤️1
    15
    用 find dir -other-opts -delete 代替 -exec rm {} \;
    yanw
    yanw
    OP
    Nov 22, 2015
    16
    @crayygy 求解?
    v1024
    v1024
    Nov 22, 2015 via iPhone❤️1
    17
    @yanw
    我知道你在用命令行
    brew install trash
    JJaicmkmy
    JJaicmkmy
    Nov 22, 2015 via iPhone❤️1
    18
    @yanw 因为 Adobe 是 A 开头,先被删,而且小文件很多,删除要很久。
    iphone7166
    iphone7166
    Nov 23, 2015❤️1
    19
    find . -name "._" -print
    确认后
    find . -name "._*" -delete
    WildCat
    WildCat
    Nov 23, 2015 via iPhone❤️2
    20
    brew install trash
    alias rm="You should use 'del' instead."
    alias del="trash"
    dorentus
    dorentus
    Nov 23, 2015
    21
    rm 文件不要加 -rf 啊
    hyq
    hyq
    Nov 23, 2015❤️1
    22
    名字里面有空格?
    dot_clean 可以删除那些点文件
    JerningChan
    JerningChan
    Nov 24, 2015
    23
    你应该这样的,到去你的目的盘
    rm -rf ._* 这样就好了嘛...
    为毛要写的这么繁杂?
    JerningChan
    JerningChan
    Nov 24, 2015
    24
    而且._* 这类文件好像是 mac 的 spotlight 产生的吧?
    完全没必要删了呀
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3080 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 10:47 · PVG 18:47 · LAX 02:47 · JFK 05:47
    ♥ Do have faith in what you're doing.