名前に特定の文字列(「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つの検索コマンド。

関連情報