찾을 대안? [닫은]


30

find보다 일반적인 CLI 인터페이스 가있는 대체 프로그램이 있습니까? find대부분의 다른 유틸리티와는 다른 방식으로 매개 변수가 작동하고 예상됩니다.

설명 : POSIX (또는 적어도 GNU) 명령 줄 권장 사항처럼 작동하고 느껴지는 명령 줄 인터페이스로 찾기와 대부분 동일한 기능을 가진 프로그램을 찾고 있습니다.


7
GNU find는 명령 행에 대한 POSIX (또는 GNU) 지침을 존중하지 않습니다. 예를 들어, 매개 변수의 순서, 단일 대시가있는 다중 문자 옵션 등은 적합한 프로그램과 다릅니다.
— Tamás Szelei

3
나는 알고 있고 항상 어떤 식 으로든 내가 원하는 것을 할 수 있습니다. 나는 최근에 알게 ack되어 더 나은 것이 있는지 궁금해하고있었습니다 find.
— Tamás Szelei

2
아시다시피, 나는 작은 프로그래밍 언어를 원하지 않지만 더 단순하고 직관적이며 일관된 찾기를 원합니다 (일부 고급 기능의 손실을 의미하더라도). 프로그램 작성을 정당화하는 작업에 직면했을 때 나는 그렇습니다.
— Tamás Szelei

2
찾기는 일관되고 (내 대답 참조) 직관적입니다. 프라이 머리 이름이 이상한 것 같지는 않습니다. -exec는 실행, -print는 인쇄, -name은 이름과 일치 함을 의미합니다. 실제로, 전자의 3 및 유형은 사용 사례의 95 %를 차지합니다. 다른 모든 경우에는 사람이 있습니다.
— Mel

3
@ tamas 나는 한 시간 전에 편집했으며 찾기 이외의 대안은 없다고 말했습니다. 그리고 아마도 ls -R은 그것을 생각하게 될 것입니다. 다른 대안은 find를 에뮬레이트하는 GUI 프로그램입니다. 그렇지 않으면 찾기 대안으로 원하는 것을 지정해야합니다. 더디 나무를 걸어? 필터 파일 이름? 그때 어떤 파일이 최신인지 알려주세요.
— Mel

답변:


11

이것은 일반적인 오해입니다.

찾기 옵션 구문을 따릅니다. 식 기본을 옵션과 혼동하고 있습니다.

 find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression]
 [cmd][-->        options          <--] [--> arg0..argN  <--]

대안은 찾습니다. 그러나 find는 더 풍부한 필터 및 작업 옵션 세트를 제공하기 때문에 자체 식 구문을 구현합니다. 단순히 중복 될 수 있기 때문에 동일한 작업을 수행 할 수있는 대안은 없습니다.


5
그것이 내 잘못이더라도 내 질문에 대답하지 않습니다.
— Tamás Szelei

expression (하나만 허용됩니까?), cmd (dito?), options 및 args의 차이점은 무엇입니까?
— 사용자가 알 수 없음

@user unknown-find 명령은 자체 표현식 구문을 구현합니다. 주어진 경우, 표현식은 명령 행의 마지막 인수입니다. 없으면 expression은 -print로 확인됩니다.
— Mel

아-이제는 [cmd]가 [expression]을 따르지 않지만 이전 줄에 대한 설명입니다.
— 사용자가 알 수 없음

2
OP는 find"대부분의 다른 유틸리티와는 다른 방식으로 매개 변수를 예상 할 수 없다 " 고 주장합니다 . OP는 "표현식 기본을 옵션과 혼동합니다"라고 말합니다. 대부분의 다른 유틸리티는 "표현식 기본"개념을 가지고 있습니까? 그렇지 않다면 OP의 요점 을 보여 주지 않습니까? 그리고 그것은 실제로 사용하는 가장 이상한 부분이 아닙니다 find. 다른 CLI 관련 사항 {}(어떻게 탈출해야합니까?)
— Kyle Strand

10

그것은 find당신이 의지하고 있는 정확한 기능에 달려 있습니다. (주로) 찾기 기능인 경우 일부 쉘은 재귀 글로브를 지원합니다. 예를 들면 다음과 zsh같습니다.

% find . -name \*c
./a/b/foo.c
./a/bar.c
./baz.c
inoshiro% ls *.c
baz.c
% ls **/*.c 
a/bar.c  a/b/foo.c  baz.c

Zsh는 glob 한정자를 통해 훨씬 더 유사한 가능성을 가지고 있습니다 (끝 부분 근처에 있음 man zshexpn). 예를 들면 다음과 같습니다.

ls -l **/*(.)  ≈   find -type f -ls
ls *(m-2u:$USER:)  ≈  find -mtime -2 -user $USER

Bash 4에는 **/(로 활성화해야 함 shopt -s globstar) 있지만 glob 한정자와 같은 것은 없습니다.


10

나는 살펴볼 것이다 locate. 파일 데이터베이스를 살펴보고 사용자가 지정한 것과 일치하는 경로 이름을 빠르게 인쇄합니다.

kevin@box:~$ locate odg
/home/kevin/Documents/final.odg
/usr/share/doc/packages/sysconfig/netconfig.odg
/usr/share/gimp/2.0/help/en/gimp-tool-dodge-burn.html
....
kevin@box:~$ locate .odg
/home/kevin/Documents/final.odg
/usr/share/doc/packages/sysconfig/netconfig.odg
kevin@box:~$ 

당신이 볼 수 있듯이, 그것은 서브 텍스트 이상형 : 당신이 그것을 주면 odg, 다음은 D 일치 ODG의 전자. 그러나 당신이 그것을 준다면 .odg, 그렇지 않을 것입니다.

그러나 단점이 있습니다. 데이터베이스가 필요합니다. 상황이 바뀌면이 데이터베이스를 업데이트해야합니다. Fedora 13을 설치하면 매일 crontab에 저장됩니다.


나는 사랑locate
— 앤드류 램버트에게

1
또한 locate는 패턴을 받아들입니다 (최근에 이것을 배웠습니다).
— Adam Byrtek

5

무엇을 찾으려고합니까? 일반적으로 소스 코드 파일을 검색하는 경우를 참조하십시오 ack. 기본적으로 소스 코드 검색 도구이지만 ack의 -f스위치는 주어진 파일 형식과 일치하는 파일을 찾습니다.

따라서 디렉토리에서 모든 Perl 파일을 찾으려면 다음과 같이하십시오.

ack -f --perl

ack이 인식하는 파일 형식이 마음에 들지 않으면에 파일 형식을 추가 할 수 있습니다 ~/.ackrc.

ack는와 같은 범용 파일 찾기가 find아니지만 소스 코드로 작업하는 경우 매우 유용 할 수 있습니다.


1
이것은 사용자가 질문하지만 사람들이 소스 (그렙 같은) 코드의 발견에 매우 유용 찾을 수있는 것이 아니다 실버 검색 자 , silversearcher-ag주요 배포판의 패키지.
— Pablo A

-1

모든 프로그래머가 배워야 할 가장 큰 것 중 하나는 다음과 같습니다. 도구를 찾을 수 없으면 자신 만의 도구를 만드십시오!

#!/usr/bin/bash
find -name $<

-t필터 유형 등 으로 더 나은 것을 작성할 수 있습니다 .

편집 : 위는 Bash 스크립트입니다. 명령 행 인수를 받아서 -name 옵션의 값으로 찾기 위해 전달합니다. 간단한 예입니다. 이 답변을 작성한 후이 파이썬 스크립트를 찾았습니다.

https://github.com/sjl/friendly-find/

인터페이스는 멋지지만 성능을 테스트하지 않았습니다. 체크 아웃 할 가치가있을 수 있습니다.


1
자체 도구 설명을 작성하는 데 적합합니다. 그러나 최소한 작은 스크립트가 어떻게 작동하는지 설명하십시오.
— jippie

1
$<내 Bash에서 유용한 일을하지 않습니다. 무엇을 기대하십니까? "$@"실제로 의미 합니까? 또는 "$1"(기본적으로 이것이 Makefile에서 의미하는 것입니까)?
— tripleee

1
@tripleee - $<는 IS csh의 동등한 read나는 그가 그 의미 같은데요은 -.
— DarkHeart

-2

유닉스에서 물건을 찾는 가장 표준적인 방법.

du -a <directory>|grep <pattern>| awk  '{print $2}'

1
grep | awk반 패턴입니다. 쓸모없는 사용을grep 참조하십시오 . 패턴을 매개 변수화하려면 다음을 수행하십시오.du -a | awk -v "pat=<pattern>" '$0 ~ pat { print $2 }'
— tripleee

@tripleee 매우 유용한 정보 awk이지만 UNIX 철학의 가장 큰 장점 중 하나는 원하는 것을 수행 할 수있는 파이프 라인을 구성하기 위해 보다 복잡한 도구 (예 : awk및 find) 의 모든 기능을 이해할 필요가 없다는 것입니다. 태스크. grep | awk최적이 아닐 수도 있습니다 (또는 고도로 최적화 된 성능을 가진 고성능 멀티 스레드 시스템 grep에서는 가능할 수도 있습니다). 그러나 간단 합니다.
— Kyle Strand
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.