在/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/