与Windows上的Unix find命令等效


34

Windows 上的Unix find命令等效于什么?

我看到find.exeWindows上的Windows版本更像是grep。我特别感兴趣的是

find . -name [filename]

2
我的答案有问题吗?我可以改善吗?您还需要帮助吗?
JohannesM

抱歉,我不久前没有看到此线程。感谢您的回答和歉意,不及早接受。
ARV 2012年

Answers:


21
dir <drive: [drive:]> /s | findstr /i <pattern>

-替代-

dir /s <drive:>\<pattern>

dir c: d: /s | findstr /i example.txt

-替代-

dir /s c:\example.txt

dir c: /s example.txt也可以。
DevSolar 2012年

@DevSolar您可以重新检查命令吗?我已经在Windows 5.1 Build 2600 SP3上对其进行了测试,您的命令仅向我提供了目录c中的文件列表:
JohannesM

1
嗯...抱歉 为我提供从记忆中键入内容的权利。dir /s C:\example.txt它是。
DevSolar 2012年

1
对于最相似的结果,我使用\b简短的(仅输出路径);find <folder> -name <pattern>-> dir /s /b <folder><pattern>。例如find /tmp -name *.txt-> dir \s \b C:\temp\*.txt。然而dir总是返回的绝对路径列表,而find总是给人前缀路径<folder>
Hashbrown

28

Find-ChildItemWindows Powershell中的Cmdlet与Unix / Linux find命令等效

http://windows-powershell-scripts.blogspot.in/2009/08/unix-linux-find-equivalent-in.html

一些Find-ChildItem选项

  1. Find-ChildItem -Type f -Name ".*.exe"
  2. Find-ChildItem -Type f -Name "\.c$" -Exec "Get-Content {} | Measure-Object -Line -Character -Word"
  3. Find-ChildItem -Type f -Empty
  4. Find-ChildItem -Type f -Empty -OutObject
  5. Find-ChildItem -Type f -Empty -Delete
  6. Find-ChildItem -Type f -Size +9M -Delete
  7. Find-ChildItem -Type d
  8. Find-ChildItem -Type f -Size +50m -WTime +5 -MaxDepth 1 -Delete

披露:我是Find-ChildItemcmdlet 的开发人员


2
谢谢。这绝对是我在回答这个问题时想要的。
supercheetah 2015年

7
Find-ChildItem不是官方的cmdlet,也不包含在PowerShell中;您必须从某人的OneDrive下载此cmdlet。这与下载bash,cygwin,unixutils或任何其他可以运行UNIX的程序没有什么区别find
沃伦

19

没有安装其他cmdlet,您可以简单地使用Get-ChildItem

Get-ChildItem -Filter *.zip -Recurse $pwd

1
在这种情况下,你可能想使用短别名之一dirls或者gci,除非你正在写一个脚本。
Swonkie '18年

5

如果你正在使用Unix的发现来搜索目录层次结构中的文件,然后PowerShell的方法是使用Get-ChildItem(别名gci)cmdlet和结果与过滤器Where-Object(别名where)cmdlet的。

例如,要查找C:\Users\名称中带有单词“ essential”的所有文件(从头开始并递归),请使用以下命令:

PS> gci -Path "C:\Users\"  -Recurse | where {$_.Name -like '*essential*'}

-like选项允许您使用通配符进行模式匹配。


2

这不是GNU的确切发现,而是更紧密地与Powershell下的Linux命令行名称相匹配:

PS> dir -recurse -ea 0 | % FullName | sls <grep_string>

例:

PS> cd C:\
PS> dir -recurse -ea 0 | % FullName | sls "Program" | sls "Microsoft"
PS> dir -recurse -ea 0 | % FullName | sls "Program" | sls "Microsoft" | out-gridview

注意:“ |%FullName”之后返回的所有内容都是字符串,而不是对象。

您还可以使用Where运算符“?”,但是它的工作量更多,并且运行速度并不快:

PS> cd C:\
PS> dir -Recurse -ea 0 | ? FullName -like "*Program*" 
                       | ? FullName -like "*Microsoft*" 
                       | % FullName 
                       | out-gridview

这是一个快速捷径:

PS> function myfind {dir -recurse -ea 0 | % FullName | sls $args }

PS> cd C:\
PS> myfind "Programs" | sls "Microsoft"

#find all text files recursively from current directory
PS> myfind "\.txt$"

#find all files recursively from current directory
PS> myfind .

从UnixUtils中找到-exec grep {}不能正常工作,似乎“没有这样的文件或目录”。此解决方案:从批处理脚本中运行PowerShell.exe -Command“ dir -Recurse -ea 0 |?FullName -like'* .log'| sls错误”。注意:必须在内部使用单引号,在外部使用双引号。
凯文夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.