find
正規表現を使用してディレクトリ内の特定のファイルを検索したいと思います。
もし私がするなら
cd dir
find -E . -type f -regex '^\..*[^~]'
正規表現に一致するディレクトリのファイルのリストを取得します。
しかし、もし私がそうするなら
find -E ~/dir -type f -regex '^\..*[^~]'
つまり
find -E /home/adam/dir -type f -regex '^\..*[^~]'
私は何の結果も得られません。find
正規表現を使用するときに検索するディレクトリをどのように指定しますか?
find
これはMacのようにBSDです。
答え1
引数は-regex
見つかったフルパスと一致する必要があります。同様のコマンドはfind .
同様のパスを探し./dir/subdir/somefile
、同様のコマンドはfind ~/dir
同様のパスを見つけます/home/adam/dir/subdir/somefile
。したがって、正規表現は先頭に
/home/adam
一致する必要があります。
このコマンドは、find -E . -type f -regex '^\..*[^~]'
改行文字を含まずで始まらない名前を探します~
。.
パスは.で始まるので、.で始まる名前は常に一致します./
。
ドットファイルを探している場合は、ディレクトリプレフィックスを許可する必要があります。次のコマンドは、名前が次に終わらないドットファイルを表示します~
。
find -E /whatever -regex '(\n|.)*/\.[^/]*[^~]'
しかし、これを次のように表現する方が簡単です-name
。
find /whatever -name '.*[!~]'