find
보다 전통적인 CLI 인터페이스에 대한 대안이 있습니까 ? find
작동하고 인수를 기대하는 방식은 대부분의 다른 유틸리티와 매우 다릅니다.
설명: 저는 POSIX(또는 적어도 GNU) 명령줄 제안과 작동하고 유사한 느낌을 주는 명령줄 인터페이스를 사용하여 기본적으로 find와 동일한 작업을 수행하는 프로그램을 찾고 있습니다.
답변1
좀 볼게요 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와 일치합니다.오데그e. 하지만 주면 그런 .odg
일은 일어나지 않을 것이다.
그러나 단점이 있습니다. 데이터베이스가 필요합니다. 조건이 변경되면 데이터베이스를 업데이트해야 합니다. 그러나 Fedora 13 설치에서는 일일 crontab에 포함되어 있습니다.
답변2
이것은 일반적인 오해입니다.
조회는 옵션 구문을 따릅니다. 옵션과 기본 표현을 혼동하고 있습니다.
find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression]
[cmd][--> options <--] [--> arg0..argN <--]
또 다른 옵션은 포지셔닝입니다. 그러나 find는 더 풍부한 필터 및 작업 옵션 세트를 제공하므로 자체 표현식 구문을 구현합니다. 중복되기 때문에 동일한 작업을 수행할 수 있는 다른 옵션은 없습니다.
답변3
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는 유사한 검색에 대해 더 많은 가능성을 가지고 있습니다글로벌 예선(보기 끝 man zshexpn
). 예를 들어:
ls -l **/*(.)
find -type f -ls
ls *(m-2u:$USER:)
≒≒ find -mtime -2 -user $USER
Bash 4에도 이 기능이 있지만 **/
(enable을 사용해야 함 shopt -s globstar
) glob 한정자와는 다릅니다.
답변4
모든 프로그래머가 배워야 할 한 가지 좋은 점은: 도구를 찾을 수 없다면 직접 만들어보세요!
#!/usr/bin/bash
find -name $<
-t
필터 유형 등을 사용하여 더 나은 것을 작성할 수 있습니다 .
편집하다: 위 내용은 Bash 스크립트입니다. 명령줄 인수를 허용하고 이를 -name 옵션의 값으로 find에 전달합니다. 간단한 예입니다. 이 답변을 요청한 이후 다음 Python 스크립트를 찾았습니다.
https://github.com/sjl/friend-find/
인터페이스는 좋아 보이지만 아직 성능을 테스트하지는 않았습니다. 한 번 볼만한 가치가 있을 것 같습니다.