V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kerrspace
V2EX  ›  程序员

求教一个查找空文件夹的 bash 脚本

  •  
  •   kerrspace · 2022-08-12 09:18:53 +08:00 · 2124 次点击
    这是一个创建于 825 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在搜集 NGA 上的帖子(关于女拳等等)操作就是 mkdir 和帖子一样名字的文件夹,然后把帖子整个生成一个 png 截图然后保存到文件夹里面,但是问题是有的时候我手滑操作错了,漏了一些文件夹没有把图片放进去。

    现在我写了一个 bash 的脚本,目的是让它输出当前目录下所有文件夹里面有没有空的,但是写出来的代码根本探测不到空文件夹,求各位对 bash 脚本熟悉的老哥捉虫,我想知道我错在哪里了

    for dir in */; do
    if [ -z "ls -A ./$(dir)/*" ]; then
    echo "Empty"
    else
    echo "Not Empty"
    fi
    done
    17 条回复    2022-08-13 18:07:32 +08:00
    yfugibr
        1
    yfugibr  
       2022-08-12 09:26:04 +08:00 via Android   ❤️ 1
    find . -type d -empty
    yfugibr
        2
    yfugibr  
       2022-08-12 09:32:16 +08:00 via Android
    你的 ls -A 那句用双引号括起来是不会执行的,直接被当作字符串了,想执行用反引号 `ls` 或 $(ls)
    xmai
        3
    xmai  
       2022-08-12 09:33:36 +08:00
    find ~/Downloads/ -type d -empty | wc -l
    xmai
        4
    xmai  
       2022-08-12 09:34:06 +08:00
    find ~/Downloads/ -type f -not -empty | wc -l
    xmai
        5
    xmai  
       2022-08-12 09:49:24 +08:00
    #!/bin/bash
    for dir in */; do
    if [ "$(ls -A $dir)" ]; then
    echo "Wow, $dir is not Empty"
    else
    echo "$dir is Empty"
    fi
    done
    lolizeppelin
        6
    lolizeppelin  
       2022-08-12 09:51:45 +08:00   ❤️ 2
    一个带空格的就要了你们这些脚本的命
    没必要不要写 shell,shell 水太深你们把握不住....
    james122333
        7
    james122333  
       2022-08-12 11:07:21 +08:00
    这问题可以回答

    #!/bin/bash

    for d in */
    do
    for f in $d*
    do
    [[ -e "$f" ]] && break 1
    done && echo "Directory '${d%\/}' is not emtpy" || echo "Directory '${d%\/}' is emtpy"
    done
    james122333
        8
    james122333  
       2022-08-12 11:27:27 +08:00
    @lolizeppelin
    本来就不建议档名有空格

    有空格第二个 for $d*改成"$d"*
    xz410236056
        9
    xz410236056  
       2022-08-12 11:31:09 +08:00
    @james122333 #8 谁说文件夹不建议空格的。。Windows mac Linux 都一堆系统文件夹中间带空格。
    james122333
        10
    james122333  
       2022-08-12 14:36:26 +08:00 via Android
    @xz410236056

    应用归应用 系统归系统 你看过哪些重要组件是如此的 其它系统不管 linux 是这样
    lululau
        11
    lululau  
       2022-08-12 14:40:27 +08:00
    one-liner 不算脚本哈😂
    mingl0280
        12
    mingl0280  
       2022-08-12 23:34:17 +08:00
    @james122333 可别 linux 是这样了,linux 底下直接写 utf8 带单引号的文件名的脚本我都见过。
    mingl0280
        13
    mingl0280  
       2022-08-12 23:34:42 +08:00
    @xz410236056 见识少是这样的
    mingl0280
        14
    mingl0280  
       2022-08-12 23:36:55 +08:00
    @james122333 Windows 早期还推荐 8.3 呢……
    james122333
        15
    james122333  
       2022-08-13 00:51:13 +08:00 via Android
    @mingl0280

    你有看文吗 系统以及大部份应用包内名称是没空格的 你爱看多少例外随你 看过的脚本也几乎没有含空格的名称 win 下倒是看过很多 可能有些人把 win 的习惯带进来 特例当通例
    mingl0280
        16
    mingl0280  
       2022-08-13 05:24:49 +08:00 via Android
    @james122333 我说你这就是 8.3 时代的毛病,咋好像跟戳了你 g 点似的……
    james122333
        17
    james122333  
       2022-08-13 18:07:32 +08:00 via Android
    @mingl0280

    win 下从第几版开始并不关心 在所有案例上没空格是通例 虽然 win 下有空格的很多 没空格的也很多 比起脚本更常见在于说明文档和影音 好几分可能是楼主应用范围没错 但在几乎所有情况下没空格更好做事 尤其对 shell 来说空格是魔法
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1554 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 17:12 · PVG 01:12 · LAX 09:12 · JFK 12:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.