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 ```