일련의 디렉터리에서 이름에 특정 문자열(예: "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개의 검색 명령.