Distributions
› Ubuntu
› Fedora
› CentOS
中文资源站
› 网易开源镜像站
dazkarieh
V2EX  ›  Linux

外行求 find 写法

  •  
  •   dazkarieh · Feb 16, 2019 · 5375 views
    This topic created in 2823 days ago, the information mentioned may be changed or developed.

    最近在整理硬盘(水果机),想删除 /downloads 目录下所有 mht 类型的文件。

    无奈神秘代码太多,不能一一删除,所以在终端试了下 find 命令

    find . -name "*.mht"  | xargs rm -f 
    

    发现还有漏网之鱼。

    ./1118 -1141/{最新国产日韩欧美新片合集发布}.mht
    ./1118 -1141/_1024 核工厂最新地址.mht
    ./1119 -2318-01-10/{最新国产日韩欧美新片合集发布}.mht
    ./1119 -2318-01-10/_1024 核工厂最新地址.mht
    ./1109 -0680/{最新国产日韩欧美新片合集发布}.mht
    ./1109 -0680/_1024 核工厂最新地址.mht
    ./1117 -0413/{最新国产日韩欧美新片合集发布}.mht
    ./1117 -0413/_1024 核工厂最新地址.mht    
    

    *.mht 难道不能包含所有 mht 类型的文件吗,求正解 o(╯□╰)o

    21 replies  •  2019-02-17 13:59:47 +08:00
    Valyrian
    Valyrian
    Feb 16, 2019
    1
    双引号换成单引号
    Valyrian
    Valyrian
    Feb 16, 2019
    2
    当我没说- -
    dazkarieh
    dazkarieh
    OP
    Feb 16, 2019
    3
    @Valyrian 改了,结果还是一样
    sdijeenx
    sdijeenx
    Feb 16, 2019
    4
    find . -name *.mht -exec rm -rvf {} \;
    aocif23
    aocif23
    Feb 16, 2019
    5
    先用 find . -name "*.mht" 看看能匹配到不。

    我一般这样用的。
    find . -name "*.mht" | xargs -i rm -rf {}
    aocif23
    aocif23
    Feb 16, 2019❤️1
    6
    另外,老歌借一部说话 [滑稽]
    zbinlin
    zbinlin
    Feb 16, 2019❤️1
    7
    find . -name '*.mht' -delete

    find . -name '*.mht' -exec rm '{}' \;

    find . -name '*.mht' -print0 | xargs -0 rm -f
    luozic
    luozic
    Feb 16, 2019 via iPhone
    8
    最好先输出到一个文本里面,检查一下之后直接按 list 删掉
    sdijeenx
    sdijeenx
    Feb 16, 2019
    9
    @luozic 有道理,可以在 rm 后边加个-i 输入 y 才会删除文件像这样:
    find . -name *.mht -exec rm -i {} \;
    dazkarieh
    dazkarieh
    OP
    Feb 16, 2019
    10
    @sdijeenx 谢谢老哥,一句话搞定。
    @zbinlin 大哥你牛逼,玩出花式来了
    @aocif23 试了这位老哥的,显示
    ```bash
    xargs: illegal option -- i
    usage: xargs [-0opt] [-E eofstr] [-I replstr [-R replacements]] [-J replstr]
    [-L number] [-n number [-x]] [-P maxprocs] [-s size]
    [utility [argument ...]]
    ```
    hguandl
    hguandl
    Feb 16, 2019
    11
    推荐楼上的那个 print0 写法,能解决一些奇怪字符造成的问题。而且 xargs -0 就是专门和 find -print0 对接的参数,非常适合搭配使用。
    misaka19000
    misaka19000
    Feb 16, 2019 via Android
    12
    用 python 写会简单很多
    ipwx
    ipwx
    Feb 16, 2019
    13
    我最近喜欢这么用:

    find . -name "*.xxx" -exec bash -c '
    FN="{}"
    ... 然后你就可以随便怎么写了
    ' \;
    quinoa42
    quinoa42
    Feb 17, 2019
    14
    没删成是因为空格在 expand 之后被当成 arg 分隔符了吧
    shuangyeying
    shuangyeying
    Feb 17, 2019
    15
    学了一招,之前都是设置成只搜索当前文件夹,然后搜索后缀名,然后直接删除。
    richzhu
    richzhu
    Feb 17, 2019 via iPhone
    16
    为什么要 find 你这个需求 直接 rm -rf *.mht
    billgreen1
    billgreen1
    Feb 17, 2019❤️1
    17
    @richzhu *.mht 会被扩展成具体的文件名,文件数量过多后 rm 就搞不定了,这个数量具体是多少得查查。
    sparkssssssss
    sparkssssssss
    Feb 17, 2019 via iPhone
    18
    @richzhu 多级目录
    sparkssssssss
    sparkssssssss
    Feb 17, 2019 via iPhone
    19
    有大括号,估计 rm 报错了?
    用 inode 删
    richzhu
    richzhu
    Feb 17, 2019 via iPhone
    20
    @billgreen1 他不是就要删除 mht 扩展名嘛,不根据需求来嘛😂 他能有几个文件……
    iwtbauh
    iwtbauh
    Feb 17, 2019 via Android
    21
    既然是 Linux 节点,我默认你用的是 GNU find

    GNU find 有一个 '-delete' 选项

    即

    find . -name "*.mht" -delete
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1117 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 59ms · UTC 23:08 · PVG 07:08 · LAX 15:08 · JFK 18:08
    ♥ Do have faith in what you're doing.