Bash 对于目录中的文件,忽略文件夹
迭代for循环时,如何确保它忽略输出目录Bash 对于目录中的文件,忽略文件夹,bash,shell,Bash,Shell,迭代for循环时,如何确保它忽略输出目录 for filename in /home/user/* do echo $filename done; 您可以使用-d运算符检查$filename是否引用目录: for filename in /home/user/* do if [ ! -d "${filename}" ] then echo $filename fi done; 有关详细信息和其他可用的运算符,请参阅 您还可以使用: 而IFS='$\n'读取-r文件名
for filename in /home/user/*
do
echo $filename
done;
您可以使用
-d
运算符检查$filename
是否引用目录:
for filename in /home/user/*
do
if [ ! -d "${filename}" ]
then
echo $filename
fi
done;
有关详细信息和其他可用的运算符,请参阅
您还可以使用:
而IFS='$\n'读取-r文件名
是否回显“$filename”
已完成<如我的中所述,您确实希望使用查找
。您尝试在7-10行脚本上执行的操作可以通过以下方式完成:
find /home/user -type f -printf "%f\n"
或者,使用find
命令:
find /home/user ! -type d -maxdepth 1
可以在循环中使用条件语句。类似这样(未经测试):
如果它是一个目录,-d
是真的,这与相反代码>。所以,如果它确实存在并且不是目录,它将成功。find命令更适合您所需要的内容
find /home/user -type f
@乔索,谢谢。下次你可以告诉我我忘记了\n
。是的,或者更好的是,只需停留在查找/主页/用户-type f
,或者,要执行OP想要的操作,请切换到查找/主页/用户-not type d
;-)@JoSo如果您单击我的答案中指向OP的其他答案的链接,则-printf“%f\n
的原因将更加明显。这是正确的答案(请允许我强调,很难与找到正确的shell交互)当我按原样使用第一个代码部分时,它会回显/home/user/*
,而不是文件夹的内容。@Mechaflash然后/home/user
为空或只有隐藏文件。要获取隐藏文件,可以使用/home/user/*
或查找,尽管使用查找命令(正如Jo所提示的那样)“您可能需要告诉我们您是如何使用它的,以便我们能帮助您正确使用它。@Kevin文件夹包含一个txt和pdf文件。检查以确保它们没有被隐藏。我最终使用了find
方法,因为它能满足我的需要。我正在做的正是问题所要求的:回显文件夹的内容减去目录。一个不错的替代方案。”tive is:test-d$filename&继续
for filename in /home/user/*
do
if [ ! -d "$filename" ]; then
echo $filename
fi
done
find /home/user ! -type d -maxdepth 1
if [ ! -d "$filename" ]
then
// do stuff
fi
find /home/user -type f