英文:
Powershell Get-ChildItem -Filter '*.txt' also finds '*.txt~' (too greedy?)
问题
I'm on Windows 11 with Powershell version 5.1.22621.963.
I want to list the contents of a directory while filtering on files ending in ".txt". I try the following:
> ls -Filter "*.txt";
Directory: C:\so_example
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 3/3/2023 11:25 AM 0 example.txt
-a---- 3/3/2023 11:25 AM 0 example.txt~
But that also finds files that end in ".txt~" with a tilde, '~', as the last character. Those are backup files added by my text editor. I can remove them, but it gets pretty tedious if I have a large directory with many backup files.
What's going on here? Why is the tilde being matched? How can I stop it from being matched?
I tried forming a search expression that will match only to the end of "txt", like this:
> ls -Filter "*.txt$"
But this returns no results (in the same directory as above).
英文:
I'm on Windows 11 with Powershell vesrion 5.1.22621.963.
I want to list the contents of a directory while filtering on files ending in ".txt". I try the following:
> ls -Filter "*.txt"
Directory: C:\so_example
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 3/3/2023 11:25 AM 0 example.txt
-a---- 3/3/2023 11:25 AM 0 example.txt~
But that also finds files that end in ".txt~" with a tilde, '~', as the last character. Those are backup files added by my text editor. I can remove them, but it gets pretty tedious if I have a large directory with many backup files.
What's going on here? Why is the tilde being matched? How can I stop it from being matched?
I tried forming a search expression that will match only to the end of "txt", like this:
> ls -Filter "*.txt$"
But this returns no results (in the same directory as above).
答案1
得分: 1
这是.NET API的一个异常情况:
> 当您在searchPattern中使用星号通配符字符并指定三个字符的文件扩展名,例如"*.txt",此方法还会返回具有以指定扩展名开头的文件。
有一个解决方法,但它包括搜索字符串的限制。如果您不使用开头,而是使用一排问号,您会得到预期的结果:
Get-Child-Item -Filter '??????????????????.txt';
限制:如果?
的数量太少,您会得到较少的文件名。
1https://learn.microsoft.com/en-us/dotnet/api/system.io.directory.enumeratefiles?view=net-7.0
英文:
This is an anomaly of the .NET API:
> When you use the asterisk wildcard character in searchPattern and you specify a three-character file extension, for example, "*.txt", this method also returns files with extensions that begin with the specified extension.
There is a workaround, but it includes a limitation of the search string. If you don't use the start but instead a row of questions marks, you get the expected result:
Get-Child-Item -Filter '??????????????????.txt'
Limitation: If the number of ?
is too small you get less file names.
1https://learn.microsoft.com/en-us/dotnet/api/system.io.directory.enumeratefiles?view=net-7.0
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论