polecenie find w cygwin podające niepoprawny format parametru


14

Używam cygwin w moim komputerze z systemem Windows. Próbuję wykonać wyszukiwanie, a format parametru jest nieprawidłowy. Dlaczego?

$ ls
bootstrap.jar
catalina-tasks.xml
catalina.bat
catalina.sh
commons-daemon-native.tar.gz
commons-daemon.jar
cpappend.bat
digest.bat
digest.sh
setclasspath.bat
setclasspath.sh
shutdown.bat
shutdown.sh
startup.bat
startup.sh
tomcat-juli.jar
tomcat-native.tar.gz
tool-wrapper.bat
tool-wrapper.sh
version.bat
version.sh

$ find . -name "version.sh"
FIND: Parameter format not correct
  • Czy powinienem coś instalować podczas instalacji cygwina, czy robię coś źle?
find  cygwin 

Odpowiedzi:


19

Twój PATHjest zły. Ma katalogi systemowe Windows przed katalogami Cygwin, a może wcale nie ma katalogów Cygwin. Ten komunikat pochodzi z polecenia systemu Windows find(że jego nazwa FINDjest zapisywana wielkimi literami, jest wskazówką).

Kiedy uruchamiasz powłokę Cygwin, zwykle musisz ustawić PATH. Zalecam uruchomienie powłoki logowania (jeśli dobrze pamiętam, to właśnie robią domyślne pozycje menu systemowego Cygwin). Swoją Cygwin PATHpowinni mieć /usr/local/bin, /usr/bini /bin(co najmniej) przed każdym katalogu non-Cygwin.


1
Tak, prawdopodobnie o to chodzi. Ten błąd wynika z tego, że użyte polecenie znalezienia jest poleceniem znajdującym się w systemie Windows, a nie poleceniem cygwina.
Yanick Girouard

Lub wpisz /usr/bin/findzamiastfind

Mam /usr/binna ścieżce, chyba powłoka używa pierwszej findznalezionej w $ PATH, czyli systemowej. Już miałem go usunąć (bo i tak go nie potrzebowałem) , ale chyba losowe skrypty systemowe mogą się tego spodziewać find. Tak więc naprawienie tego właściwego sposobu polega na zapisaniu aliasu alias find="/usr/bin/find"w ~/.bashrc (lub jakiejkolwiek powłoce, której używasz) .
Cześć Anioł

1

Czy program Find jest zainstalowany? Co zwraca „które znajdują”? Pamiętaj, że system Windows ma wbudowane wykrywanie wiersza poleceń, którego Cygwin użyłby, gdyby jego własne znalezisko to mia.


1

Odpowiedź Gillesa jest prawidłowa, ponieważ wersja findkomendy Windows znajduje się przed wersją cygwin i dlatego jest wywoływana.

Wyprzedzanie Cygwina oznacza jednak, że wszystkie pliki wsadowe korzystające z findkomendy windows będą teraz wywoływać findkomendę cygwin , co może nie być tym, czego chcesz.

Moim zdaniem najbardziej symbiotyczny sposób działania obu jest wykonanie następujących czynności:

  1. Zlokalizuj findpolecenie cygwin i zmień jego nazwę / skopiuj na lfind.exe(lub dowolną inną nazwę, która nie znajduje się na ścieżce systemu Windows)
  2. W swoim ~/.bashrcpliku dodaj linięalias find=lfind

W ten sposób, kiedy uruchomisz findz terminalu cygwin, będziesz używać wersji cygwin, ale pliki wsadowe będą używać wersji Windows.

Uwaga: Nadal będziesz potrzebował katalogu bin cygwin na PATH, ale może być teraz dalej z katalogu systemu Windows.


0

Podczas instalacji Cygwin nie instaluje wszystkich możliwych pakietów, chyba że o to poprosisz. Aby dodać żądany pakiet, zapoznaj się z wyjaśnieniem tutaj na temat Super User.

Lub po prostu wykonaj następujące czynności:

  1. Uruchom Instalatora, wybierz kopię lustrzaną i przejdź do ekranu pakietów
  2. Wybierz „Zachowaj” z listy przycisków opcji u góry
  3. Wybierz żądany pakiet w ramach odpowiedniej grupy
  4. Wybierz „Kontynuuj”

0

Oto GNU-utils jako natywne porty win32 . Nie potrzebują uruchamiania cygwina i są dostarczane z powłoką (sh.exe), w tym grep, sed, awk, find, less, cat, tac i wiele więcej.

Problem ze ścieżką systemu Windows będzie się utrzymywał, ale może zmienisz nazwę find na gfind(gnu-find) lub to search, aby uczynić go łatwiej dostępnym, i dodasz katalog coreutils do ŚCIEŻKI.

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.