현재 디렉토리의 OS X 기본값에서 "찾기"명령을 어떻게 만들 수 있습니까?

StackOverflow https://stackoverflow.com/questions/194725

  •  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 패키지, 원하는 다른 도구도 설치하면서도 패키지가 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top