Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash命令以获取目录中的文件列表_Bash_Shell - Fatal编程技术网

Bash命令以获取目录中的文件列表

Bash命令以获取目录中的文件列表,bash,shell,Bash,Shell,我必须键入什么才能获得当前目录中满足以下条件的文件列表 不应包括隐藏文件(以“.”开头) 不应包括文件夹名称 文件名应包括其扩展名 不应将带空格的文件名拆分为多个列表项 (我打算在bash脚本中的foor循环中循环结果。) 应该适合你的需要 maxdepth 1->仅在当前目录中搜索 -名称“*”->搜索与名称模式“*”不匹配的文件 类型f->只搜索文件,不搜索目录您可以尝试以下方法: find $folderPath -type f -printf "%f\n" | grep -v

我必须键入什么才能获得当前目录中满足以下条件的文件列表

  • 不应包括隐藏文件(以“.”开头)
  • 不应包括文件夹名称
  • 文件名应包括其扩展名
  • 不应将带空格的文件名拆分为多个列表项
(我打算在bash脚本中的foor循环中循环结果。)

应该适合你的需要

maxdepth 1
->仅在当前目录中搜索

-名称“*”
->搜索与名称模式“*”不匹配的文件

类型f
->只搜索文件,不搜索目录

您可以尝试以下方法:

 find $folderPath  -type f  -printf "%f\n" | grep -v '^[.].*'
您只需更改$folderPath

解释

查找$folderPath-type f-printf“%f\n”

使用“查找”命令,您可以使用多个选项搜索文件夹

  • “-type f”仅搜索文件,如果要按文件夹筛选,只需更改“d”的“f”

  • “-打印“%f\n”格式化命令的输出。”f'提取文件名并'\n'添加一个返回值

  • “|”是一根管子。通过管道,您可以使用命令的输出,将其用作其他命令中的输入变量

grep-v'^[.].*'

  • grep是一个命令,用于查找输入文本中的正则表达式
  • 使用选项'-v'^[.].*',可以排除包含正则表达式的值。在本例中,以a开头的单词。(点)
要关闭解释,如果使用另一个“|”(管道),则可以像处理另一个命令的输入一样处理命令的每个结果。这具有更好的性能,因为输出位于流中,处理结果需要更少的内存。

仅使用bash:

files=()
for f in *; do [[ -d $f ]] || files+=("$f"); done
printf "%s\n" "${files[@]}"

使用*然后跳过目录作为循环的第一步怎么样

for F in * ; do
    if test -d "$F" ; then continue ; fi
    echo "$F"
done

在bash脚本中的for循环中使用什么?使用find in there是否合理,或者是否有更好的方法?向上投票并向10万代表表示热烈祝贺!在
done
@tripleee之前需要一个语句终止符(分号或换行符)。那里有一个换行符。格式化后的帖子为我展示了它。我并不怀疑你-也许有一个特定于浏览器、特定于用户等的bug。请参阅源代码和/或格式帮助以找出差异。
for F in * ; do
    if test -d "$F" ; then continue ; fi
    echo "$F"
done