在 bash 中输入具有给定字符串的目录

  • 本文关键字:字符串 bash bash
  • 更新时间 :
  • 英文 :


我有许多目录想要输入,并且都以相同的字符串"example"开头。除此之外,在同一位置,还有其他我不想输入的目录。我习惯于以这种方式循环:

for dir1 in */

以前具有其他名称的其他目录存在于同一位置,但现在我不能了。我尝试使用以下方法改变命令:

for dir1 in "example"*/

或 例如,对于 dir1*/ 光盘"目录1"

但它不会进入目录。它说:line 8: cd: example*//: file or directory does not exist。我该怎么做?

shell 扩展通配符

for dir1 in */

进入通配符匹配列表;

for dir1 in ack/ bar/ foo/ nst/ pth/ quux/

如果要从此列表中排除foobar,最简单的解释是启用扩展通配,假设您有 Bash;

shopt -s extglob
for dir1 in !(foo|bar)*/

但是任何排除您不想匹配通配符的文件的技巧都是可以的。 在这种特殊情况下,您可以做

for dir1 in [!bf]*/

但在悲观的情况下,您只需要分解并列出您想要匹配的目录。 或者也许只是单独绕过不需要的:

for dir1 in */; do
    case $dir1 in bar|foo) continue ;; esac
    : ... your code here
done

如果您确实想遍历名称以 example 开头而没有其他名称的所有目录,那么这样做的方法当然是

for dir1 in example*/

您收到的错误消息似乎表明没有具有此名称的目录。

你可以用一行bash试试这个,

for dir in example*; do if [ -d $dir ];then cd $dir; pwd; echo $dir; fi; done

巴什脚本,

#!/bin/bash
for dir in example*
do 
   if [ -d $dir ];then 
        cd $dir; 
        pwd; 
        echo $dir; 
    fi
done

Bash 文件名通配是一件很光滑的事情。改用查找可能更方便。喜欢这个:

    for dir in `find /cygdrive/c/workspaces/ -name '*log*' -a -type d`; do echo $dir; done

"-类型 d"仅适用于目录。

相关内容

  • 没有找到相关文章

最新更新