我已经发出命令:
ls -lrt
列出的文件和目录是:
drwxr-xr-x 4 root root 4096 Feb 2 2014 abc
drwxr-xr-x 4 root root 4096 Feb 2 2014 cde
drwxr-xr-x 4 root root 4096 Feb 2 2014 efg
-rwxr-xr-x 4 root root 4096 Feb 2 2014 aaa.txt
现在我想通过使用 for 循环或 while 循环来查找列出的输出文件是否是目录。
答案1
对于ls
,使用以下命令仅列出目录。
ls -d -- */
要使用 ls 本身列出常规文件(并假设文件名不包含换行符),您可以使用以下命令。
ls -p | grep -v /
要仅列出常规文件,使用 GNU 和其他一些查找实现,您可以使用
find . -maxdepth 1 -type f
(请注意,与前一个相反,它还包括隐藏文件并且列表未排序)
标准等效项是:
find . ! -name . -prune -type f
答案2
如果您想要一个类似“shell 脚本模板”的东西来了解如何循环目录内容并根据文件类型执行操作,以下内容可能会给您提示:
for f in *
do
if [[ -d "$f" ]]
then
... your processing of directories here, reference them as "$f" ...
fi
done
这将查看当前目录中的所有条目,检查它们是否是目录,并对它们执行您喜欢的任何处理。请注意,目录测试的语法是 BASH 特定的;对于一般情况,使用if [ -d "$f" ]
.
另一种方法将列表限制为仅目录条目:
for d in */
do
... whatever you need to do on directory "$d" ...
done
答案3
您不需要循环来查找所有目录,您可以使用以下find
命令:
find . -maxdepth 1 -type d
这将列出当前目录中的所有目录。如果你想要ls -l
输出,你可以这样做:
find . -maxdepth 1 -type d | xargs ls -ld
如果您确实想使用循环,可以使用以下构造:
for file in $(ls)
do
if [[ -d $file ]]
then
ls -ld $file
fi
done
该for
循环遍历 所返回的所有条目ls
,然后if
测试该条目是否是目录。
答案4
列出目录名称
compgen -d
不是从一个点开始
compgen -d -X '.*' | xargs ls -dlrt