列出目录的基本脚本([:发现:意外操作符)

列出目录的基本脚本([:发现:意外操作符)

我在运行列出目录的基本脚本时遇到问题。

for item in *
do
   if [ -d $item ]
   then
      echo $item
   fi
done

结果:

  1. 列出所有系统文件夹
  2. 返回错误: for.sh: 4: [: discover: expected operator
  3. 列出所有文件夹,其名称以小写字母开头

我猜是 -d 发现了一些与首字母小写有关的问题?有人能解释一下为什么会发生这种情况吗?提前谢谢大家。

答案1

某些目录/文件的名称中可能包含空格,这会导致您收到错误。因此请使用引号:

for item in *
do
   if [ -d "$item" ]
   then
      echo "$item"
   fi
done

如果你想按字母顺序排列,请使用

for item in *
do
   if [ -d "$item" ]
   then
      echo "$item"
   fi
done | sort

举个例子,假设有一个名为 的文件My File。如果你不使用引号,你会得到(在 bash 扩展之后)

if [ -d My File ]

所以它就像“测试:是My一个目录吗?做File”,但File不是一个有效的test运算符,因此出现错误。

答案2

下面回显当前目录中的所有目录(但不包含点号,例如.git

#!/bin/bash

find . -maxdepth 1 -mindepth 1 -type d | while read Directory; do
    echo "$Directory";
done

相关内容