명령 행을 사용하여 이름으로 파일 찾기 -type f

명령 줄을 사용하여 파일의 위치를 ​​결정하고 싶습니다. 나는 시도했다 :

find . -type f -name "postgis-2.0.0"

locate postgis-2.0.0

아무 소용이 없습니다. 파일 이름을 지정하여 파일 디렉토리를 결정하는 명령은 무엇입니까?



답변

find ~/ -type f -name "postgis-2.0.0"대신 시도하십시오 .

를 사용 .하면 현재 디렉토리 만 검색합니다. ~/전체 홈 디렉토리를 검색합니다 (다운로드 한 위치). wget루트로 사용했다면 가능할 수도 있으므로 /전체 파일 시스템을 검색하는 데 사용할 수 있습니다 .

행운을 빕니다


답변

나는 시도 할 것이다 :

sudo find / -type d -name "postgis-2.0.0"

. 는 현재 디렉토리에서만 검색을 의미하므로 실제로 모르는 경우 루트에서 모든 것을 검색하는 것이 가장 좋습니다. 또한 -f 유형은 폴더가 아니라 파일을 검색 함을 의미합니다. 추가 sudo하면 모든 폴더 / 하위 폴더에서 검색 할 수 있습니다.

의 구문 locate이 정확하지만 실행해야 할 수도 있습니다

sudo updatedb

먼저. 어떤 이유로 든 나는 행운을 빕니다 locate.

locate에서 만든 파일 및 디렉토리의 데이터베이스를 사용합니다 updatedb. 따라서 새 파일을 다운로드 한 경우 updatedb파일 및 디렉토리의 데이터베이스를 업데이트하지 않았을 가능성이 큽니다. 유틸리티 프로그램을 사용 sudo updatedb하기 전에 사용할 수 있습니다 locate.
updatedb일반적으로 Linux 시스템에서 하루에 한 번 자체적으로 실행됩니다.


답변

find는 가장 유용한 Linux / Unix 도구 중 하나입니다.

시험 find . -type d | grep DIRNAME


답변

다른 대답은 좋은,하지만 난 생략 찾을 Permission denied진술하는 것은 나에게 명확한 답변 (생략합니다의 제공 stderr으로 인해 실행하지에들 sudo)

find / -type f -iname "*postgis-2.0.0*" 2>/dev/null

어디:

  • / 검색을 시작하려는 디렉토리로 바꿀 수 있습니다
  • f로 대체 할 수 d당신이 파일 대신 디렉토리를 검색하는 경우
  • -iname-name대소 문자를 구분하여 검색하려는 경우 로 대체 할 수 있습니다.
  • *검색에서 와일드 카드를 원하지 않으면 검색어 의 s를 생략 할 수 있습니다.

대안은 다음과 같습니다.

find / -type f 2>/dev/null | grep "postgis-2.0.0"

이 방법은 검색 용어가 전체 파일 경로의 임의의 위치와 일치하는 경우 결과를 반환합니다 (예 : /home/postgis-2.0.0/docs/Readme.txt


답변

시험 find . -name "*file_name*"

  • 여기서 ‘.'(현재 디렉토리를 봅니다)를 ‘/'(전체 시스템을 봅니다) 또는 ‘~ /'(홈 디렉토리를 봅니다)로 변경할 수 있습니다.

  • 대소 문자를 구분하지 않으려면 “-name”을 “-iname”으로 변경할 수 있습니다.

  • 여기서 ” file_name “(무엇이든 시작하고 끝날 수있는 파일)을 파일의 정확한 이름으로 변경할 수 있습니다 .


답변

이렇게하면 파일 찾기가 간단 해집니다.

이것은 당신에게 파일의 전체 경로를 줄 것입니다

tree -f  / | grep postgis-2.0.0

트리는 디렉토리의 내용을 트리와 같은 형식으로 나열합니다. -f는 트리에 파일의 전체 경로를 제공 하도록 지시합니다. 우리는 그 위치 나 부모 위치를 알지 못하므로 파일 시스템 루트에서 /재귀 적으로 아래쪽으로 검색하는 것이 좋습니다 . 그런 다음 출력을 grep에 보내 단어를 강조 표시합니다.postgis-2.0.0


답변

find명령이 디렉토리 트리를 재귀 적으로 순회하는 가장 간단한 방법 이지만 다른 방법이 있으며 특히 기본적으로 우분투와 함께 제공되는 두 가지 스크립팅 언어는 이미 그렇게 할 수 있습니다.

세게 때리다

bashglobstar디렉토리 트리의 재귀 탐색을 허용 하는 매우 멋진 쉘 옵션이 있습니다. ./**/*확장의 항목 이 파일인지, 원하는 텍스트를 포함하는지 여부를 테스트하기 만하면됩니다.

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))