find
명령이 디렉토리 트리를 재귀 적으로 순회하는 가장 간단한 방법 이지만 다른 방법이 있으며 특히 기본적으로 우분투와 함께 제공되는 두 가지 스크립팅 언어는 이미 그렇게 할 수 있습니다.
세게 때리다
bash
globstar
디렉토리 트리의 재귀 탐색을 허용 하는 매우 멋진 쉘 옵션이 있습니다. ./**/*
확장의 항목 이 파일인지, 원하는 텍스트를 포함하는지 여부를 테스트하기 만하면됩니다.
bash-4.3$ for f in ./**/* ;do [ -f "$f" ] && [[ "$f" =~ "postgis-2.0.0" ]] && echo "$f"; done
./testdir/texts/postgis-2.0.0
펄
Perl은 디렉토리 트리의 재귀 탐색을 수행하고 서브 루틴을 통해 특정 조치를 수행 할 수있는 찾기 모듈을 가지고 있습니다. 작은 스크립트를 사용하면 디렉토리 트리를 탐색하고 원하는 문자열이 포함 된 파일을 배열로 푸시 한 다음 다음과 같이 인쇄 할 수 있습니다.
#!/usr/bin/env perl
use strict;
use warnings;
use File::Find;
my @wanted_files;
find(
sub{
-f $_ && $_ =~ $ARGV[0]
&& push @wanted_files,$File::Find::name
}, "."
);
foreach(@wanted_files){
print "$_\n"
}
그리고 그것이 작동하는 방법 :
$ ./find_file.pl "postgis-2.0.0"
./testdir/texts/postgis-2.0.0
파이썬
파이썬은 우분투 세계에서 매우 널리 사용되는 또 다른 스크립팅 언어입니다. 특히, 그것은 os.walk()
우리가 위와 같은 동작을 수행 할 수있게하는 모듈을 가지고 있습니다-디렉토리 트리를 탐색하고 원하는 문자열을 포함하는 파일 목록을 얻습니다.
하나의 라이너로 다음과 같이 수행 할 수 있습니다.
$ python -c 'import os;print([os.path.join(r,i) for r,s,f in os.walk(".") for i in f if "postgis-2.0.0" in i])'
['./testdir/texts/postgis-2.0.0']
전체 스크립트는 다음과 같습니다.
#!/usr/bin/env python
import os;
for r,s,f in os.walk("."):
for i in f:
if "postgis-2.0.0" in i:
print(os.path.join(r,i))
locate
명령은 괜찮 습니다. 명령을 사용하여updatedb