kthompson / glob

A C# Glob library for .NET and .NET Core.
https://kthompson.github.io/glob/
MIT License
215 stars 21 forks source link
c-sharp directory-traversal dotnet dotnet-core glob glob-library

# Glob

Join the chat at https://gitter.im/kthompson/glob Build status Coverage Tests Nuget

A C# Glob library for .NET.

What is a glob?

A glob is a pattern-matching syntax that shells use. Like when you do rm *.cs, the *.cs is a glob.

See: http://en.wikipedia.org/wiki/Glob_(programming) for more info.

Try it out!

You can test out Glob expressions using this library in your browser by visiting:

https://kthompson.github.io/glob/

image

Supported Environments

Features

Common Expressions

Pattern Description
taco* matches any string beginning with taco
*taco* matches any string containing taco
*taco matches any string ending in taco
*.[ch] matches any string ending in .c or .h
*.{gif,jpg} match any string ending in .gif or .jpg

Expressions

Pattern Description
* matches any number of characters including none, excluding directory separator
? matches a single character
[abc] matches one character in the brackets
[!abc] matches any character not in the brackets
** match zero or more directories
{abc,123} comma delimited set of literals, matched 'abc' or '123'

Other Features

Getting Started

Installing from NuGet

dotnet add package Glob

Setup

To use Glob, you need to include the namespace:

using GlobExpressions;

Example

var glob = new Glob("**/bin");
var match = glob.IsMatch(@"C:\files\bin\");

Static Usage

Single file

var match = Glob.IsMatch(@"C:\files\bin\", "**/bin");   

Files in a directory

string[] matchingFiles = Glob.Files(@"C:\files\bin\", "**/bin").ToArray();  

Directories in a directory

string[] matchingDirectories = Glob.Directories(@"C:\files\bin\", "**/bin").ToArray();  

Extension Methods

DirectoryInfo.GlobDirectories

Enumerate through all matching directories recursively.

Params

Example

var root = new DirectoryInfo(@"C:\");
var allBinFolders = root.GlobDirectories("**/bin");

DirectoryInfo.GlobFiles

Enumerate through all matching files recursively.

Params

Example

var root = new DirectoryInfo(@"C:\");
var allDllFiles = root.GlobFiles("**/*.dll");

DirectoryInfo.GlobFileSystemInfos

Enumerate through all matching files and folders recursively.

Params

Example

var root = new DirectoryInfo(@"C:\");
var allInfoFilesAndFolders = root.GlobFileSystemInfos("**/*info");

Upgrading from 1.x

In 2.x all Glob expressions no longer support \ as path separators. Instead / should be used to separate paths in expressions. The / path separator will still match on platform specific directory separators but \ is reserved for escape sequences.

Performance

See benchmarks