我正在尝试解析子目录名称,但输出将名称分解为单个单词。
例如。如果子目录名称是“Hello World”,则输出将为:
.
Hello
World
以下代码有效,但输出包括我不想要的当前目录:
find "$my_dir" -maxdepth 1 -type d -print0 |
while IFS= read -rd '' dir;
do
echo "$dir";
done
我试图包含一个 if 语句,该语句从输出中消除当前目录,但代码似乎仍然看到每个子目录名称的单独单词:
find "$my_dir" -maxdepth 1 -type d -print0 |
while IFS= read -rd '' dir;
do
if ["$dir" != "."]; then
echo "$dir"
fi
done
答案1
空格的中断发生在您的read
命令中,但您无论如何都不需要这样做。另外,你的if
逻辑也有问题。仅当my_dir
等于 时它才起作用.
,否则find
不会.
在其输出中生成 a 。最后,您在示例中声明,您只需要目录的名称,而不是整个路径,但按照您编写的方式,find
会将路径传递给标准输出。
这是一个更简单的解决方案:
find "$my_dir" -maxdepth 1 -type d -exec basename {} \;|tail -n +2
这里的技巧是tail
命令。您想要$my_dir
从输出中排除起始目录 ( )。find
始终首先输出此目录(除非您明确要求深度优先遍历),因此您只需从结果输出中删除第一行即可。
答案2
如果有,请使用该-mindepth
选项,该选项可在此处用于排除树中的最顶层目录
find "$my_dir" -mindepth 1 -maxdepth 1 -type d -print0
但是,由于您还-maxdepth
限制了深度,为什么不只使用for
循环
for dir in "$my_dir"/*
do
[[ -d "$dir" ]] || continue # only directories
echo "${dir/*\/}" # just basename
done