знайти команду в cygwin, надаючи формат параметра невірний


14

Я використовую cygwin у своїй машині Windows. Я намагаюся зробити пошук, і це надає формат параметрів не правильний. Чому так?

$ 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
  • Чи потрібно щось встановлювати під час встановлення cygwin чи я роблю щось не так?
find  cygwin 

Відповіді:


19

Ваше PATHпогано. Він має системні каталоги Windows перед каталогами Cygwin, або, можливо, зовсім не має каталогів Cygwin. Це повідомлення походить від команди Windows find(що він повідомляє про своє ім'я, як FINDу верхньому регістрі - підказка).

Коли ви запускаєте оболонку Cygwin, вам зазвичай потрібно встановити PATH. Рекомендую запустити оболонку для входу (якщо я пам'ятаю правильно, саме це роблять записи в системне меню Cygwin за замовчуванням). Ваш Cygwin PATHповинен мати /usr/local/bin, /usr/binі /bin(принаймні) перед будь-якій директорії без Cygwin.


1
Так, напевно, це все. Ця помилка пояснюється тим, що використовувана вами знахідка - це команда пошуку Windows, а не cygwin.
Янік Жируар

Або введіть /usr/bin/findзамістьfind

У мене був /usr/binшлях, я думаю, оболонка використовує перший, findзнайдений у $ PATH, який є системним. Я збирався її видалити (бо мені це все одно не знадобився) , але я думаю, що деякі випадкові сценарії системи можуть очікувати саме цього find. Отже, виправити це правильним способом - це написати псевдонім alias find="/usr/bin/find"у ~/.bashrc (або будь-яку оболонку, яку ви використовуєте) .
Привіт-Ангел

1

Чи встановлено пошук? Що повертає "що знаходить"? Пам'ятайте, що у Windows є вбудований командний рядок, який знайде Cygwin, якщо власна знахідка буде mia.


1

Відповідь від Gilles правильна тим, що версія findкоманди Windows надходить до версії cygwin, і тому вона викликається.

Однак, якщо попередити Cygwin вперед, це означає, що всі пакетні файли, що використовують команду Windows find, тепер насправді викликають команду cygwin find, що може бути не тим, що ви хочете.

На мою думку, найбільш симбіотичним способом роботи є виконання наступних дій:

  1. Знайдіть команду cygwin findта перейменуйте / скопіюйте її lfind.exe(або будь-яке інше ім’я, яке не є у Windows PATH)
  2. У свій ~/.bashrcфайл додайте рядокalias find=lfind

Таким чином, при запуску findз терміналу cygwin ви будете використовувати версію cygwin, але пакетні файли використовуватимуть версію Windows.

Примітка: Вам все одно знадобиться каталог зі скринькою cygwin у вашому PATH, але тепер він може бути повернений назад із системного каталогу Windows.


0

Під час встановлення Cygwin він не встановлює всі можливі пакети, якщо ви цього не вимагаєте. Для того, щоб додати потрібний пакет, подивіться пояснення тут на Super User.

Або просто виконайте такі дії:

  1. Запустіть налаштування, виберіть дзеркало та перейдіть до екрана пакунків
  2. Виберіть "Зберегти" зі списку перемикачів у верхній частині
  3. Виберіть потрібний пакет у відповідній групі
  4. Виберіть "Продовжити"

0

Ось GNU-утиліти як рідні порти win32 . Їм не потрібно запускати cygwin і мати оболонку (sh.exe), включаючи grep, sed, awk, find, менше, cat, tac та багато іншого.

Проблема зі шляху до Windows не зникне, але, можливо, ви перейменовуєте цю знахідку в gfind(gnu-find) або на search, щоб зробити її легшою доступною, і додасте основні функції dir до вашої PATH.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.