2017-02-20 2 views
2

Angenommen, ich habe die folgende Verzeichnisstruktur:Glob umfassen aktuelles Verzeichnis und rekursiv Unterverzeichnisse

file.txt 
file.css 
file.js 
directory/file.txt 
directory/file.css 
directory/file.js 
directory/subdirectory/file.txt 
directory/subdirectory/file.css 
directory/subdirectory/file.js 

Ich möchte in der Lage sein, alle der txt und css Dateien in allen Verzeichnissen zu finden (im Idealfall ohne find weil Ich möchte, dass der Befehl, den ich schreibe, erweiterbar ist). Die Liste der Dateierweiterungen sollte in einer Variablen mit dem Namen FILE_PATTERN lauten.

Der Befehl sollte schließlich Ausgabe:

  • directory/subdirectory/file.css
  • directory/subdirectory/file.txt
  • directory/file.css
  • directory/file.txt
  • file.css
  • file.txt

Aber jedes Globbing Muster, das ich Rückkehr versuche nicht das Ergebnis:

$ FILE_PATTERN="{**/,}*.{css,txt}" 
$ echo $FILE_PATTERN 
# FAILS: Returns 0 results 

$ FILE_PATTERN={**/,}*.{css,txt} 
$ echo $FILE_PATTERN 
# FAILS: Returns 0 results 

$ echo {**/,}*.{css,txt} 
# FAILS: Only returns: 
directory/file.css directory/file.txt file.css file.txt 

Irgendwelche Vorschläge?

+0

Sind Sie Feedback zu geben planen die Antwort? Können Sie es als akzeptiert markieren, wenn es Ihr Problem gelöst hat? – Inian

Antwort

0

nicht sicher, was Sie gegen Fund haben, kann es mit wenig Aufwand (auch auf einem MAC) sehr dehnbar gemacht werden:

FILE_PATTERN=(txt css) 

IFS='|' 
find -E -iregex ".*(${FILE_PATTERN[*]})" 

Ich habe keinen Mac mit zu spielen, aber ich denke, das -E-Option sollte für Sie arbeiten, wenn nicht, einen Blick auf den Mann Seite :)

+0

Hallo Gral. Ursprüngliche Zurückhaltung zu finden war wegen der Syntax für -o, aber das sieht nach dem Ansatz aus, den ich brauche. Vielen Dank! – bashaus

+0

Benötigt, um den Punkt hinzuzufügen: 'find -E. -iregex ". * ($ {FILE_PATTERN [*]})" ' – bashaus

0

Basierend auf @ grail Antwort, die ich für diese endete gehen:

FILE_EXTENSIONS="txt|css" 
find -E . -iregex ".*\\/[^\\/]+\\.(${FILE_EXTENSIONS})\$" 
./directory/file.css 
./directory/file.txt 
./directory/subdirectory/file.css 
./directory/subdirectory/file.txt 
./file.css 
./file.txt 
Verwandte Themen