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

时间:2015-10-21 14:49:04

标签: bash shell

我需要输入什么来获取满足以下条件的当前目录中的文件列表?

  • 不应包含隐藏文件(以"。"开头)
  • 不应包含文件夹名称
  • 文件名应包含其扩展名
  • 带空格的文件名不应分解为多个列表项

(我打算在bash脚本的循环中循环结果。)

4 个答案:

答案 0 :(得分:2)

只使用bash:

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

答案 1 :(得分:0)

find . -maxdepth 1 ! -name '.*' -type f

应该可以满足您的需求

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

! -name '.*' - >搜索与名称模式不匹配的文件'。*'

type f - >仅搜索文件,而不是dirs

答案 2 :(得分:0)

你可以试试这个:

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

您只需要更改$ folderPath。

<强>解释

  

找到$ folderPath -type f -printf&#34;%f \ n&#34;

使用find命令,您可以使用多个选项搜索该文件夹。

  • &#39; -type f&#39;只搜索文件,如果你想按文件夹过滤,你只需要更改&#39; f&#39;对于&#39;

  • &#39; -print&#34;%f \ n&#34;&#39;格式化命令的输出。 &#39;%F&#39;提取文件名和&#39; \ n&#39;添加回报。

  • &#39; |&#39;是一个管道。使用管道,您可以使用命令的输出将其用作其他命令中的输入var。

  

grep -v&#39; ^ [。]。*&#39;

  • grep是在输入文本中查找正则表达式的命令。
  • 使用选项&#39; -v&#39; ^ [。]。*&#39;,您可以排除包含正则表达式的值。在这种情况下,以a开头的单词。 (点)。

要结束解释,如果您使用其他&#39; |&#39; (管道)你可以处理命令的每个结果,如另一个的输入。这具有更好的性能,因为输出在Stream中,并且需要更少的内存来处理结果。

答案 3 :(得分:0)

如何使用*然后跳过目录作为循环的第一步?

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