현재 디렉토리의 OS X 기본값에서 "찾기"명령을 어떻게 만들 수 있습니까?
-
10-07-2019 - |
문제
나는 무거운 명령 줄 사용자이며 find
내 빌드 시스템 스크립트에서 광범위하게 명령하십시오. 그러나 집중하지 않을 때 Mac OS X에서 나는 종종 다음과 같은 결과를 얻습니다.
$ find -name \*.plist
find: illegal option -- n
find: illegal option -- a
find: illegal option -- m
find: illegal option -- e
find: *.plist: No such file or directory
기본적으로 작은 도트를 추가하는 것을 잊었습니다.
$ find . -name \*.plist
BSD 때문에 find
경로와 GNU가 필요합니다 find
디렉토리를 지정하지 않으면 현재 디렉토리를 가정합니다 (현재 디렉토리를 지정하지 않으면). 나는 Linux, Mac OS X 및 Cygwin을 종종 동시에 사용하므로 모든 도구가 동일하게 행동하게하는 것이 큰 도움이됩니다. 나는 bash를 쓰려고 노력했다 find
"./"를 추가 한 함수는 잊어 버렸지 만 실패했습니다. 당신의 도움을 주셔서 감사합니다. :)
해결책
자신을 징계 할 수 없다면 사용합니다 find
'정확하게', GNU를 설치하지 않겠습니까? find
(에서 findutils
) 시스템 앞에있는 경로의 디렉토리에서 find
명령.
나는 나만의 개인 변형을 가지고 있었다 cp
목록의 마지막 항목이 디렉토리가 아닌 경우 파일을 현재 디렉토리에 복사합니다. 나는 그것을 내 개인적으로 유지했다 bin
몇 년 동안 디렉토리 - 그러나 더 이상 기능을 사용하지 않기 때문에 결국 제거했습니다. (내 'cp.sh'는 1987 년에 작성되었으며 1990 년과 1997 년에 버전 제어 시스템 표기법 변경의 일부로 두 번 편집되었습니다. 1998 년경에 제거했다고 생각합니다. 스크립트의 주요 문제는 cp file1 file2
파일을 다른 파일 위에 복사하고 두 파일을 현재 디렉토리에 복사하는 것 사이의 모호합니다.)
자신의 래퍼를 작성하는 것을 고려하십시오 find
:
#!/bin/sh
[ ! -d "$1" ] && set -- . "$@"
exec /usr/bin/find "$@"
두 번째 줄은 "인수 1이 디렉토리가 아닌 경우 명령 줄 인수를 나머지 명령보다 앞서 DOT를 포함하도록 조정합니다.
~/bin/find /non-existent/directory -name '*.plist' -print
존재하지 않는 디렉토리는 디렉토리가 아니고 스크립트는 명령 줄에 점을 추가 할 것이기 때문에 개인 사용을 중단 한 이유입니다. cp
명령.
다른 팁
대신 GNU 찾기를 설치하십시오.
$ brew install findutils
$ alias find=gfind
예, 작동합니다!
'찾기'라고 부르면 다음을 원합니다.
alias find=/usr/bin/find\ .
.profile 또는 .bash_profile 또는… Mac OSX에서 실제 경로 (/usr/bin/find가 아닌 경우)를 대체하십시오. 사이클을 피하기 위해 전체 경로를 입력합니다 (Bash는 일반적으로 해석됩니다. alias find=find
문제가 없지만 확실히 확인하십시오).
그러나 당신은 별명의 이름을 지정하지 않는 것이 좋습니다 find
(Findl, MyFind 등), 다른 시스템에서 시도하면 습관과 문제가되기 때문입니다.
find ./ -name "*.plist"
편집하다: 흠, 나는 질문을 오해했을 것입니다! 당신이 미쳤다면, 쉘 스크립트를 통해 그것을 에뮬레이션하는 것은 어떻습니까? 나는 일상적으로 임의의 유틸리티 스크립트를 ~/.bin에 보관하며, 이것이 내 길에서 첫 번째입니다. 비슷한 설정이 있다면 아마도 다음과 같은 일을 할 수 있습니다. (Untested!)
#!/bin/sh
# remapping find!
CMD=`echo $1 | cut -c 1`
if [ $CMD = '-' ]
then
# pwd search
/usr/bin/find ./ $*
else
# regular find
/usr/bin/find $*
fi
나는 당신이 스크립트를 작성하는 경우 (미래에 언젠가 한 시스템에서 다른 시스템으로 마이그레이션 될 가능성이 높음) 더 구체적인 형태의 명령을 사용해야하는데, 즉 ""를 지정하는 것 "이라고 제안합니다. 기본값에 의존하는 대신. 같은 이유로, 나는 심지어 글쓰기를 제안 할 수도 있습니다 sh
의존하는 대신 스크립트 bash
어디에서나 설치되지 않을 수 있습니다.
이것은 아마도 당신이 원하는 것이 아니라 다음과 같습니다. alias find="find ."
또는 새 이름을 선택하십시오 (findl
현지인을 찾으려면?)
이 링크에서 찾은 명령을 실행할 수 있습니다. https://www.topbug.net/blog/2013/04/14/install-and-use-gnu-command-line-tools-in-mac-os-x/
예를 들어 약간 구식입니다. 예를 들어, 나는 경로에 많은 명령을 전혀 추가 할 필요가 없다는 것을 알았습니다.
이것은 시스템이 비 BSD 찾기 유틸리티를 사용하도록하여 문제를 다루고 있습니다. findutils
패키지, 원하는 다른 도구도 설치하면서도 패키지가 있습니다.