在 /bin/sh
脚本中,我想检查一个目录是否只包含一个子目录而没有其他文件(当然除了“.”和“..”) .我可能可以解析 ls
的输出,但我也明白这通常是个坏主意。建议?
提问原因:当我zip
一个文件夹,比方说,一台windows机器,我在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/