Qual è l'equivalente del comando find Unix su Windows?
Vedo che find.exe
su Windows è più simile a grep
. Sono particolarmente interessato all'equivalente di
find . -name [filename]
Qual è l'equivalente del comando find Unix su Windows?
Vedo che find.exe
su Windows è più simile a grep
. Sono particolarmente interessato all'equivalente di
find . -name [filename]
Risposte:
dir <drive: [drive:]> /s | findstr /i <pattern>
- alternativa -
dir /s <drive:>\<pattern>
dir c: d: /s | findstr /i example.txt
- alternativa -
dir /s c:\example.txt
dir c: /s example.txt
funziona anche.
dir /s C:\example.txt
è.
\b
per brevi (percorsi solo output); find <folder> -name <pattern>
-> dir /s /b <folder><pattern>
. Ad esempio find /tmp -name *.txt
-> dir \s \b C:\temp\*.txt
. Tuttavia dir
restituisce sempre un elenco di percorsi assoluti, mentre find
fornisce sempre percorsi con prefisso<folder>
Il Find-ChildItem
Cmdlet in Windows Powershell è un equivalente del comando find di Unix / Linux
http://windows-powershell-scripts.blogspot.in/2009/08/unix-linux-find-equivalent-in.html
Alcune opzioni di Find-ChildItem
Find-ChildItem -Type f -Name ".*.exe"
Find-ChildItem -Type f -Name "\.c$" -Exec "Get-Content {} | Measure-Object -Line -Character -Word"
Find-ChildItem -Type f -Empty
Find-ChildItem -Type f -Empty -OutObject
Find-ChildItem -Type f -Empty -Delete
Find-ChildItem -Type f -Size +9M -Delete
Find-ChildItem -Type d
Find-ChildItem -Type f -Size +50m -WTime +5 -MaxDepth 1 -Delete
Divulgazione: sono lo sviluppatore del Find-ChildItem
cmdlet
Find-ChildItem
non è un cmdlet ufficiale e non è incluso in PowerShell; devi scaricare questo cmdlet dal OneDrive di alcuni ragazzi . Non c'è alcuna differenza tra questo e il semplice download di bash, cygwin, unixutils o qualsiasi altro programma che ti consente di eseguire UNIX find
.
Senza cmdlet aggiuntivi installati, è possibile utilizzare semplicemente Get-ChildItem
:
Get-ChildItem -Filter *.zip -Recurse $pwd
dir
, ls
o gci
, a meno che non si sta scrivendo uno script.
Se si utilizza Unix's find per cercare i file in una gerarchia di directory, il modo Powershell è utilizzare il cmdlet Get-ChildItem
(alias is gci
) e filtrare i risultati con il cmdlet Where-Object
(alias is where
).
Ad esempio, per trovare tutti i file (a partire da C:\Users\
e ricorsivamente) con la parola "essenziale" nel suo nome, utilizzare quanto segue:
PS> gci -Path "C:\Users\" -Recurse | where {$_.Name -like '*essential*'}
L' -like
opzione consente di utilizzare i caratteri jolly per la corrispondenza dei motivi.
Questo non è esattamente GNU find, ma corrisponde più da vicino alla filosofia della riga di comando di Linux sotto PowerShell:
PS> dir -recurse -ea 0 | % FullName | sls <grep_string>
Esempio:
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
Nota: tutto ciò che viene restituito dopo "|% FullName" è una stringa, anziché un oggetto.
Puoi anche usare l'operatore Where, "?", Tuttavia, è più lavoro e non molto più veloce:
PS> cd C:\
PS> dir -Recurse -ea 0 | ? FullName -like "*Program*"
| ? FullName -like "*Microsoft*"
| % FullName
| out-gridview
Ecco una scorciatoia veloce:
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 .