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


182

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

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

locate postgis-2.0.0

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


2
locate명령은 괜찮 습니다. 명령을 사용하여 updatedb
locatedb를

이미 설치되어 있으면 postgis-2.0.0더 이상 새 파일 이름이 아닐 수 있습니다 . 일반적으로 패키지 관리자를 통해 설치 한 후 실행 파일은 $PATH폴더 중 하나에 which postgis있습니다. 위치를 확인하십시오. 아무것도 반환하지 않으면 수동으로 파일 위치를 찾아야합니다.
sdkks

답변:


231

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

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

행운을 빕니다


1
오 나중에 내가 wget루트로 사용 너무 /감사 감사
Sam007

자세한 내용은이 링크 help.ubuntu.com/community/find
habibun에서

찾을 수 있습니다 : / Users / UserName // Library / Saved Application State / com.bitrock.appinstaller.savedState : 권한 거부 오류. 명령이 실행될 때마다 나타납니다. 그것을 제거하는 방법?
Eduard

29

나는 시도 할 것이다 :

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

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

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

sudo updatedb

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

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


14

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

시험 find . -type d | grep DIRNAME


grep over -name을 사용하면 이점이 있습니까?
TryHarder

@oooooo 아래 답변에 이유를 추가했습니다
zanbri

찾기 플러스 grep은 나를 위해 일한 유일한 것
malhal

12

다른 대답은 좋은,하지만 난 생략 찾을 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


2
있습니다 -regex-iregex함께 검색을위한 스위치 Regular Expressions경로뿐만 아니라 언급 찾을 것이다는. 파일 ( -type f) 인 항목을 찾도록 제안하면 grep더 많은 리소스가 필요합니다. Permission denied사용자가 파일이나 폴더에 액세스 할 수 없을 때 발생 sudo합니다. 이전 찾기를 사용하면 모든 파일을 볼 수 있습니다.
sdkks

1
정규식 스위치에 대해 잘 알고 있습니다. 감사합니다.
잔 브리

@zanbri 배관 대신 -wholename또는 -iwholename대신 에을 사용하십시오 grep.
wjandrea

4

시험 find . -name "*file_name*"

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

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

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


3

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

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

tree -f  / | grep postgis-2.0.0

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

0

$ find . -type f | grep IMG_20171225_*

./03-05--2018/IMG_20171225_200513.jpg
점이 명령 후에 find, 시작 지점을 명시하는
그러므로 - 현재 폴더를
이름 필터를 통해 (= 여과) "파이프"IMG_20171225_*

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.