List all Directories that do not contain a file with Wildcard Match

directory-structure, filesystems, powershell, wildcard

Solution

You can use `Get-ChildItem`, `Where-Object`, and `Select-String`:

Get-ChildItem -Directory |
Where-Object { -not (Get-ChildItem $_ -File -Recurse -Filter *merged*) } |
Select-Object Name, LastWriteTime

Below is an explanation of what each line does:

Get all directories in the current directory.

Set up a filter that searches recursively through each directory for file names that contain the string `merged`. Only pass on the directory if none are found.

Get the `Name` and `LastWriteTime` attributes of each directory.

Note too that you can write it more concisely if you want:

gci -dir | ? { !(gci $_ -file -recur -filter *merged*) } | select name, *w*time

Problem

I need to be able to list all of the directories in a root folder that do not contain a file which contains the string `merged`. So for example, if I run the script from the directory `C:\out`, I will get a list of all the folders inside of `C:\out` which do not match the wildcard `merged`. Example: Tree: ``` -c:\out --c:\out\test123 ---sample.meta ---sample_merged.meta --c:\out\test456 ---sample.meta ---sample_merged.meta --c:\out\test789 ---sample.meta --c:\out\test013 ---sample.meta ``` Output: ``` test789 test013 ```

Original source