Bash 对于目录中的文件,忽略文件夹

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循环时,如何确保它忽略输出目录

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