Unix найти команду на cmder.exe в Windows

3828
Heisenbug

Я установил эмулятор оболочки cmder для Windows.

Работает нормально, но я не могу использовать команду поиска Unix. Видимо, когда я печатаю:

'find .' 

в терминале он пытается использовать ПОИСК Windows и выводит эту ошибку:

FIND: Parameter format not correct 

Я действительно хотел бы использовать find, есть ли подсказка, как заставить это работать?

8
Вам нужно сделать так, чтобы любой каталог `find` появлялся до того, как` C: \ Windows \ System32` (где Windows 'находит жизни) в переменной окружения `PATH`. Обычно это считается не очень хорошей идеей, так как это может сбить с толку другие программы, которые ожидают стандартную среду Windows. Скорее, вы должны посмотреть, можете ли вы установить скрипт запуска в Cmder и заставить скрипт сделать что-то вроде `set PATH = C: \ path \ to \ folder \ with \ unix \ find;% PATH%` Bob 6 лет назад 1
Я не знаю `cmder`, но в Linux / Unix` which -a find` покажет все программы, которые могут выполняться с помощью команды find. Определите Unix `find`. Затем используйте его полный путь, или измените порядок каталогов `PATH`, или установите псевдоним, если` cmder` поддерживает это; Вы также можете переименовать Windows `find.exe` в` wfind.exe`. Если он эмулирует `bash`, то вы можете использовать встроенный` type -a find`. AFH 6 лет назад 0
@AFH [переименование любых системных файлов Windows рискованно, потому что обновления Windows или `sfc / scannow` могут вернуть его] (https://superuser.com/a/1208043/241386) phuclv 6 лет назад 0
@ LưuVĩnhPhúc - Хорошая ссылка. Благодарю. AFH 6 лет назад 0
Возможный дубликат [Как переименовать C: \ Windows \ System32 \ convert.exe?] (Https://superuser.com/questions/1208018/how-do-i-rename-c-windows-system32-convert-exe ) phuclv 6 лет назад 1
@AFH `which -a find` возвращает` / c / WINDOWS / system32 / find / usr / bin / find`. К сожалению, однако, запуск `/ usr / bin / find` приводит к` Системе не удается найти указанный путь. Кажется, здесь нужен настоящий путь в стиле Windows. Запуск `type` запускает windows` type`, и кажется, что `cmder` не предоставляет unix-подобную версию. simlev 6 лет назад 0
@simlev - Как вы говорите, Cygwin или (если на Win10) WSL могут быть более подходящим вариантом, хотя и не так легко вызывать нативные программы Windows, которые могут не подходить для спрашивающего. AFH 6 лет назад 0
Вы можете переместить `% git_install_root%` туда, где новый `PATH` создается в` init.bat`, см. Https://github.com/cmderdev/cmder/issues/37 Bob 6 лет назад 0

2 ответа на вопрос

8
simlev

Самое простое решение - создать псевдоним findисполняемого файла в cmderпапке установки:

λ 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] 

Могу ли я предложить вам также попробовать Cygwin, где, среди прочего, findработает из коробки. Это то, что я использовал, чтобы выяснить местонахождение cmderпоставляемого find.exe.

Престижность @Bob и @AFH за их проницательные комментарии и @ Lĩu Vĩnh Phúc за предложение другого простого решения:

переименуйте * nix findв другое имя, напримерfnd.exe

На самом деле это может быть предпочтительнее создания псевдонима, потому что cmderпсевдонимы не работают в Windows 10, если они Use legacy consoleне выбраны в cmdсвойствах (см. Как это сделать).

Спасибо за предложение. Кажется, лучший путь. Я обычно использую Cygwin, когда на Windows, но по рабочим причинам я вынужден сейчас cmder. Я попробую это как можно скорее! Heisenbug 6 лет назад 0
@Heisenbug `cmder` обладает очевидным преимуществом портативности и не требует установки для выполнения привилегированным пользователем. simlev 6 лет назад 0
Вы также можете просто переименовать * nix `find` в другое имя, например` fnd.exe` phuclv 6 лет назад 0
Я переименовал версию Unix, чтобы избежать модификации Windows. Но спасибо, что мне действительно не хватало, так это папки, в которой эти команды хранились и ваш ответ помог мне. Heisenbug 6 лет назад 0
Разве gnu обычно не называется gfind в не-gnu системах? kalle 6 лет назад 0
2
Jerem

Cmder\vendor\git-for-windows\usr\binдобавляется в PATH путем Cmder\vendor\init.bat. К сожалению, это добавлено в конце переменной PATH, поэтому сначала выполняется поиск Windows find.exe.

К счастью, это легко исправить. Просто добавьте эту строку внутрь Cmder\config\user-profile.cmd:

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