【问题标题】:Bash Script: list all directories EXCEPT specifiedBash 脚本:列出所有目录,但指定的除外
【发布时间】:2019-08-27 04:48:51
【问题描述】:

我有 bash 脚本显示目录:\

for D in /home/*; do
    if [ -d "${D}" ]; then #If a directory
        domain=${D##*/} # Domain name
        echo "- "$domain;
    fi
done
echo "Finished";

我有 2 个目录名称“默认”和“暂停”。我不想列出这两个目录名称。 请帮帮我!

【问题讨论】:

  • if [ -d "${D}" -a "${D}" != 'default' -a "${D}" != 'suspended' ] ...
  • 不要使用-a;请改用[ ... ] && [ ... ] && [ ... ]。或者因为这是bash[[ ... && ... && ... ]]
  • 您可以首先使用/home/*/ 仅选择目录,从而无需-d 测试。
  • @chepner 嘿,-a 有什么问题?我喜欢它
  • @oguzismail Bash FAQ 017 甚至表示-a 的结果未定义。

标签: linux bash centos directory centos7


【解决方案1】:

打开扩展通配符:

shopt -s extglob
for D in !(default|suspended)/
do
  domain=...
  ...
done

!(...)/ 选择除了列表中的目录之外的所有目录。

【讨论】:

    猜你喜欢
    • 2022-11-18
    • 2023-03-04
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多