
ディレクトリがあります~/Documents/machine_learning_coursera/
。
注文する
find . -type d -name '^machine'
何も見つかりません
私も試しました
find . -type d -regextype posix-extended -regex '^machine'
何も一致せず、文字列の先頭に一致します。
私も次のことを試しました-name
。
find . -type d -regextype posix-extended -regex -name '^machine'
エラーが発生しました。
find: paths must precede expression: `^machine'
私がここで何を間違っているのか?
答え1
find
は正規表現ではなく、-name
シェル/glob/ワイルドカードパターンを使用します。fnmatch()
GNUfind
の-regex
非標準拡張は正規表現(デフォルトでは古いemacsタイプ)を使用しますが、ファイル-path
名だけでなくフルパス(ワイルドカードも使用する標準など)に適用されます(暗黙的に固定されています)。
したがって、次の種類のファイルを見つけるには目次名前がで始まるmachine
場合は、次のものが必要です。
find . -name 'machine*' -type d
または:
find . -regextype posix-extended -regex '.*/machine[^/]*' -type d
-regextype posix-extended
(特定の正規表現の場合、基本的な正規表現エンジンも機能するため、必要はありません。)
ちなみに最初の試合では名前さらに、ファイルはロケールで有効なテキストでなければならず、2番目のファイルの場合はフルパスが有効なテキストでなければなりません。
答え2
引数は-name
シェルglobとよく似ているため、一致するファイル名の先頭と末尾に暗黙的にバインドされていることを*
示す必要があります。
find . -type d -name 'machine*'
あるいは、-regex
記録(参照man find
)は「検索するのではなく、フルパスで一致」は、暗黙的に一致の開始と終了にもバインドされているため、次のものが必要です。
find . -type d -regextype posix-extended -regex '(.*/)?machine[^/]*'
「と言うとまた試み-name
「パラメータが必須であるという事実を忘れてしまい、そのパラメータ-regex
として使用して誤って息を止めました。-name
'^machine'
答え3
-name
、テストではfind
正規表現ではなくファイルglobを使用します。 globには特別な意味がないため、^
コマンドは実際に名前付きディレクトリを探します^machine
。名前が次から始まるすべてのディレクトリを検索したいですmachine
。
find . -type d -name 'machine*'
有効にするフラグではないため、他の試みは失敗しました。正規表現を入力として渡す必要が-regex
あります。-name
ここでは何も与えないのでfind
文句を言ってください。また、-regex
テストでは、名前だけでなくパス全体を一致させようとします。テストで実行したいタスクを実行する正しい方法は-regex
次のとおりです。
find . -maxdepth 1 -type d -regex '.*/machine.*'