이름에 특정 문자열(예: "abcde")이 포함된 파일을 찾는 방법은 무엇입니까?

이름에 특정 문자열(예: "abcde")이 포함된 파일을 찾는 방법은 무엇입니까?

일련의 디렉터리에서 이름에 특정 문자열(예: "abcde")이 포함된 파일을 어떻게 찾을 수 있나요?

답변1

find디렉토리 구조를 살펴보고 이를 기반으로 합니다.전반적인 상황:

find /your/dir -name "*abcde*"

스위치를 추가하면 -type f검색 기준이 구체화되어 파일만 반환됩니다.

find /your/dir -type f -name "*abcde*"

-maxdepth 2지정된 디렉터리 아래의 디렉터리 수준 2로 검색을 제한하는 등 다른 스위치를 포함할 수도 있습니다 .

이렇게 하면 필요한 것을 신속하게 반환하는 풍부하고 고도로 타겟팅된 검색 명령을 작성할 수 있습니다.

man find-exec반환된 파일에 대한 명령 실행 find및 정규식 사용 옵션 과 같은 작업을 포함하여 풍부한 세부 정보가 있습니다 .

답변2

사용찾다:

find path-to-search -name '*abcde*'

답변3

그것이 당신에게 효과가 있다면 locate(빠르지만 가장 최근에 실행한 만큼만 좋습니다 sudo updatedb). locate자체 내장 정규식 도구를 사용하여 실행할 수 있습니다.

이것은 원하는 작업을 수행하는 매개변수 기반 스크립트입니다. 찾고 있는 "abcde"로 $1을 사용하고 디렉터리로 후속 인수를 사용하여 호출합니다.

#!/bin/bash
a=("$@"); r=''
for ((i=1;i<${#a[@]};i++)); do r="$r|${a[i]}"; done
locate --regex  "(${r:1}).*/[^/]*${a[0]}[^/]*$"

호출 예시는 다음과 같습니다.

$ ./script_name 'z' "$HOME/bin/perl" "$HOME/type/stuff"

제안대로제이슨 라이언, 이는 주석이 달린 스크립트 버전입니다.
기억해주세요locate 언제나정규화된 경로를 출력합니다.

#!/bin/bash

# Note: Do not use a trailing / for directory names
# 
# Any of the args can be an extended regex pattern. 
#
# Create an array `a` which contains "$1", "$2", "$3", etc... (ie. "$@")
# writing the $-args to an array like this (using quotes) solves 
#   any possible problem with embedded whitespace 
a=("$@")
#
# Set up an empty string which is to be built into a regex pattern 
#   of all directroy names (or an appropriate regex pattern)
r=''
#
# Each regex pattern is to be an extended regex    
# Each regex pattern is concatenated to the preceding one 
#   with the  extended-regex 'or' operator |
#
# Step through the array, starting at index 1 (ie, $2),
#   and build the 'regex-pattern' for the directories 
for ((i=1;i<${#a[@]};i++)); do r="$r|${a[i]}"; done
#
# Run 'locate' with
#                           |the target file pattern $1  | 
#                |zero-to-| |preceded and followed by    |
#                |-many   | |zero-to-many non-slash chars|
#                |anything| |               |‾‾‾‾‾‾‾‾‾‾‾‾
#                 ‾‾‾‾‾‾‾|| |               |   
locate --regex  "(${r:1}).*/[^/]*${a[0]}[^/]*$"
#        ________|      |  | 
#       |directory-regex| last
#       | in brackets ()| slash      
#       |stripped of its|
#       |leading "|"    |
#

답변4

locate abcde | egrep "(dirA|dirB|dirC)" 

디렉토리 세트의 경우 dirA, dirB, dirC.

또는 3개의 검색 명령.

관련 정보