2016-03-21 17 views
-1

Ich habe eine Liste von Dateienbash ~ Wie durch Dateien in einem Verzeichnis

  • Shopping-list.txt
  • unser-Shopping-list.txt
  • test.txt
  • meines suchen -test.txt

ich möchte myscript shopping laufen und die beiden Dateien zu erhalten, die das Wort haben shopping. Ich möchte myscript our list ausführen und nur die eine Datei abrufen.

im Moment habe ich diese

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

es ein bisschen funktioniert, aber es würde mich nicht our-shopping-list geben, wenn jede Variable eine Lücke dh hat. myscript our list es funktionieren würde, wenn ich myscript our - list getippt

ich eine große Liste von Dateien und wollen die, die ich


mein Versuch, durch Erraten den Namen finden müssen anwenden @ Pacholik Code

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 
+0

kann ich wissen, was dieses '$ {*}' tut? –

+2

Was ist los mit 'ls * 'shopping' *'? – choroba

+0

kiss 'if [[$ fs = ~ shopping]]' –

Antwort

-1

Verwenden Sie nur Bash-Erweiterung (nur Sie müssen zweimal auswerten). Bash beitreten von here.

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

Dann können Sie iterieren $files

for i in $files; do 
    echo $i 
done 
+0

Dank @pacholik Ich weiß nicht, wie das zu meinem Code zu integrieren, können Sie den Code überprüfen Ich fügte meine Antwort hinzu? – relidon

+0

@releidon: Bearbeitet. Ich habe es vorher falsch verstanden. – pacholik

1

Hier ist eine einfache Brute-Force-Schleife ist.

Ich glaube, das sollte portable zu jeder POSIX-Shell sein und möglicherweise darüber hinaus (alte Solaris usw.).

Verwandte Themen