polecenie unix znajdź polecenie cmder.exe w systemie Windows


10

Zainstalowałem emulator powłoki cmder dla Windows.

Działa dobrze, ale nie mogę użyć polecenia find w Uniksie. Najwyraźniej kiedy piszę:

'find .'

w terminalu próbuje użyć systemu Windows ZNAJDŹ i wypisuje ten błąd:

FIND: Parameter format not correct

Naprawdę chciałbym skorzystać z find, jakiejkolwiek wskazówki, jak to zrobić?


1
Trzeba by zrobić, który katalog findsię pojawi przed C:\Windows\System32(gdzie Windows odnajduje życie) w PATHzmiennej środowiskowej. Ogólnie uważa się, że nie jest to świetny pomysł, aby robić to globalnie, ponieważ może mylić inne programy, które oczekują standardowego środowiska Windows. Raczej powinieneś sprawdzić, czy możesz ustawić skrypt startowy w Cmder i sprawić, by skrypt działał w następujący sposóbset PATH=C:\path\to\folder\with\unix\find;%PATH%
Bob

Nie wiem cmder, ale w systemie Linux / Unix which -a findpokaże wszystkie programy, które mogłyby zostać uruchomione za pomocą polecenia find. Zidentyfikuj uniks find. Następnie użyj pełnej ścieżki PATHlub zmień kolejność katalogów lub ustaw alias, jeśli cmderobsługuje to; możesz także zmienić nazwę systemu Windows find.exena wfind.exe. Jeśli emuluje bash, możesz użyć wbudowanego type -a find.
AFH



which -a findZwraca @AFH /c/WINDOWS/system32/find /usr/bin/find. Niestety, /usr/bin/findprzynoszące zyski The system cannot find the path specified.. Wygląda na to, że potrzebna jest tutaj rzeczywista ścieżka w stylu Windows. Uruchamianie typeuruchamia system Windows typei wydaje się, cmderże nie zapewnia wersji podobnej do unixa.
simlev

Odpowiedzi:


12

Najprostszym rozwiązaniem jest utworzenie aliasu findpliku wykonywalnego w cmderfolderze instalacyjnym:

λ which find
/c/WINDOWS/system32/find
λ find --help
FIND: FIND: Parameter format not correct
λ alias find=C:\Files\Programs\cmder\vendor\git-for-windows\usr\bin\find.exe $*
λ find --help
Usage: /usr/bin/find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

Pozwól, że zasugeruję Ci wypróbowanie Cygwin, w którym między innymi finddziała od razu po wyjęciu z pudełka. Właśnie tego użyłem, aby ustalić lokalizację cmderdostarczonej find.exe.

Uznanie dla @Bob i @AFH za ich wnikliwe komentarze oraz @ Luu Vinh Phuc dla sugerując inną martwe proste rozwiązanie:

zmień nazwę * nix findna inną nazwę, npfnd.exe

To może być lepsze niż tworzenie aliasu, ponieważ cmderaliasy nie działają w systemie Windows 10, chyba że Use legacy consolejest zaznaczone we cmdwłaściwościach (zobacz, jak to zrobić).


Dzieki za sugestie. Wygląda na najlepszą drogę. Zwykle używam cygwina w systemie Windows, ale z powodów roboczych jestem teraz zmuszony do cmder. Spróbuję jak najszybciej!
Heisenbug

@Heisenbug cmderma oczywistą zaletę, ponieważ jest przenośny i nie wymaga instalacji, aby wykonać go uprzywilejowany użytkownik.
simlev

możesz także po prostu zmienić nazwę * nix findna inną, na przykładfnd.exe
phuclv

Zmieniłem nazwę wersji unix, aby uniknąć modyfikowania natywnych elementów systemu Windows. Ale dzięki, tak naprawdę brakowało mi folderu, w którym te polecenia były przechowywane i twoja odpowiedź pomogła mi.
Heisenbug

Czy w systemach innych niż GNU gnu nie jest normalnie nazywane gfind?

4

Cmder\vendor\git-for-windows\usr\binjest dodawany do ŚCIEŻKI przez Cmder\vendor\init.bat. Niestety jest dodawany na końcu ŚCIEŻKI, więc najpierw znajduje się find.exe systemu Windows.

Na szczęście łatwo to naprawić. Po prostu dodaj tę linię w środku Cmder\config\user-profile.cmd:

set "PATH=%GIT_INSTALL_ROOT%\usr\bin;%PATH%"


0

Zainstalowałem smartgit w systemie Windows

Następnie dodaję C: \ Program Files (x86) \ SmartGit \ git \ bin (mój folder smartgit) do środowiska ścieżki

naciśnij win + r, aby wprowadzić bash. w powłoce bash możesz użyć polecenia find. w Cmder możesz także wpisać bash, aby z niego skorzystać

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.