/bin/sh脚本中,我想检查目录是否仅包含一个子目录,而不包含其他文件(当然,除了“。”和“..”之外)。我可能可以解析ls的输出,但是我也理解这通常是个坏主意。有什么建议吗?

出现问题的原因:当我在Windows机器上zip一个文件夹,然后在Linux下将其解压缩时,有时会得到一个目录,其内容与原始文件夹相同。有时,我得到的目录只包含一个子目录,该目录的内容与原始文件夹的目录相同。 (我假设我在Windows下使用zip的方式有所不同,或者我使用的各种Windows机器的配置略有不同,或者...谁知道?)我想在Linux方面,以大致相同的方式处理这两种结果,因此出现了这个问题。

对于那些认为“如果您的Windows侧文件夹确实只包含一个子目录怎么办?”的情况,虽然我同意这是问题说明的一个特例,但在这种情况下确实可以。

最佳答案

find将是一个很好的工具。它有一些简洁的论点:

  • -maxdepth 1,因此它不会递归搜索
  • -type d仅搜索目录
  • -printf 1克服了奇怪的文件名的问题(打印1而不是文件名)

  • 完整的命令如下:
    find DIRECTORY -maxdepth 1 -type d -printf 1
    

    这将为每个目录打印一个字符,再加上目录本身,因此您正在寻找可打印两个字符的目录(查找时有一个很好的功能,可以忽略...)。

    然后,您要检查是否没有其他(非目录)文件:
    find DIRECTORY -maxdepth 1 ! -type d -printf 1
    

    完整的支票将是:
    if [ "$(find DIRECTORY -maxdepth 1 -type d -printf 1 | wc -m)" -eq 2 \
            -a "$(find DIRECTORY -maxdepth 1 ! -type d -printf 1 | wc -m)" -eq 0 ]; then
        # It has only one subdirectory and no other content
    fi
    

    或者,您可以使用-printf%y使其成为一个命令,该命令打印文件类型(目录的d):
    if [ "$(find DIRECTORY -maxdepth 1 -printf %y)" = "dd" ]; then
        # It has only one subdirectory and no other content
    fi
    

    关于linux - 如何测试Linux目录是否仅包含一个子目录而没有其他文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32429333/

    10-14 17:13
    查看更多