bash~如何搜索目录中的文件

时间:2016-03-21 13:18:52

标签: regex bash

我有一个文件列表

  • shopping-list.txt
  • our-shopping-list.txt
  • test.txt
  • MY-test.txt的

我想运行myscript shopping并获取包含shopping字样的两个文件。我想运行myscript our list并获取一个文件。

此刻我有这个

if [[ $fs =~ .*${*}*.* ]]; then
        echo $fs
fi

它有点工作,但是如果每个变量都有间隙,它就不会给我our-shopping-list。如果我输入myscript our list

,它会有用myscript our - list

我有一个很大的文件列表,想通过猜名称来找到我需要的文件

我尝试申请@ pacholik的代码

snippetdir="~/my_snippets/"
    for filename in $snippetdir*; do
        file=`basename "$filename"`
        fs=${file%.*}
        for i in ${*}; do
    for j in *${i}*; do
        if [[ $fs =~ .*$j*.* ]]; then
                echo $fs
            fi      
        done
        done
    done

2 个答案:

答案 0 :(得分:1)

这是一个简单的暴力循环。

for file in *; do
    t=true
    for word in "$@"; do
        case $file in
          *"$word"*) ;; 
          *) t=false; break;;
        esac
    done
    $t && echo "$file"
done

我认为这应该可以移植到任何POSIX shell,并且可能超出(旧的Solaris等)。

答案 1 :(得分:-1)

仅使用bash扩展(只需要评估两次)。 Bash从here加入。

files=`IFS=* eval 'echo *"${*}"*'`

然后你可以迭代$files

for i in $files; do
    echo $i
done