如果我输入
locate something | grep "someEnding$"
在 shell 中,它会花一秒钟给我提供系统中绝对路径包含“something”并以“someEnding”结尾的每个文件的列表。
有没有办法在 Windows 中做到这一点?最好是快一点,但如果没有也可以。
答案1
我认为在 Powershell 中它将是:
Get-ChildItem -Recurse *something* | Select-String "someEnding$"
答案2
在 powershell 中,做同样的事情很容易。
# gathering files with something in the name
Get-ChildItem -Path c:\temp\*something*
<# this returns
Répertoire : C:\temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 27/08/2021 14:16 dir with something in the name
-a---- 27/08/2021 14:18 9 another something file.txt
-a---- 27/08/2021 14:19 24 somethingfile.txt
#>
# note that you must add -Recurse as parameter if you're looking for only on the first level
Get-ChildItem -Path c:\temp\*something* -Recurse
# adding -file parameter, collect only file, not directory (or sub-directories)
Get-ChildItem -Path c:\temp\*something* -File -Recurse
<# this returns
Répertoire : C:\temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 27/08/2021 14:18 9 another something file.txt
-a---- 27/08/2021 14:19 24 somethingfile.txt
#>
如果你正在寻找特定内容,那就不同了
# 1 - collect list of file an put them in a var
$Allfiles = Get-ChildItem -Path C:\Temp\*.txt
# 2 - foreach loop to look for file containing specific word
foreach ($file in $Allfiles)
{
Get-Item -Path $file.FullName | Select-String -Pattern "something"
}
<# I've only one file containing "something"
the return is
C:\Temp\another something file.txt:1:something
#>
Windows Powershell 是 Windows 上的原生程序,Powershell 存在于许多操作系统中。这是一个面向脚本语言的对象。输出始终是一个具有属性的对象(或对象集合)。在第一个示例中,输出显示 4 个属性(Mode、LastWriteTime、Length 和 Name),但这是默认显示。还有其他几个属性(CreationTime、Directory(父级)、FUllName、LastAccessTime、Extension、Length、BaseName(无扩展名的名称...)
操作和获取所需信息非常容易,仅此而已。不仅可以获取,还可以修改、设置、添加、移除、删除……每个 cmdlet 都像动词-名词一样构建。动词是动作动词,名词是上下文。使用 Get-command 显示所有可用的 cmdlet。使用 Get-Command Get-* 仅显示以 get- 开头的 cmldets……