「flash_drive_data」とは関係のないすべてのファイル/ディレクトリを見つけるために、次のコマンドを実行しています。
find . -not -path './flash_drive_data*' | grep "./*flash*"
私が試したいくつかのことで私を混乱させています:
1.上記のコマンドを実行すると、いくつかの「部分的な」ヒットが発生します(つまり、*flash*
と完全には一致しません) パターン。例:
./.local/lib/python3.7/site-packages/jedi/third_party/typeshed/third_party/2and3/flask
./.local/lib/python3.7/site-packages/jedi/third_party/typeshed/third_party/2and3/flask/cli.pyi
./.local/lib/python3.7/site-packages/jedi/third_party/typeshed/third_party/2and3/flask/signals.pyi
./.local/lib/python3.7/site-packages/jedi/third_party/typeshed/third_party/2and3/flask/templating.pyi
./.local/lib/python3.7/site-packages/jedi/third_party/typeshed/third_party/2and3/flask/sessions.pyi
./.local/lib/python3.7/site-packages/jedi/third_party/typeshed/third_party/2and3/flask/json
./.local/lib/python3.7/site-packages/jedi/third_party/typeshed/third_party/2and3/flask/json/tag.pyi
3/flas
最後に強調表示されています。
2. grep "*flash*"
を置き換えたとき grep "*"
だけで 、findによってすべてのファイルが返されることを期待していましたが、何も返されませんでした。なんで?次に、grep "**"
を実行したとき 私はすべてのファイルを入手したと思います(または少なくとも私は入手したと思います)。繰り返しますが、それはなぜですか?
3.最後に、上記で行ったことの目的は、find . -not -path './flash_drive_data*'
flash_drive_dataに関連するものは何もありませんでした。私がやったように見えました(上で説明したように、grepで予期しない動作が発生しました)。ただし、実行したとき:find . -not -path './flash_drive_data*' -exec tar cfv home.tar.bz '{}' +
次のような出力を取得していました:
./flash_drive_data/index2/ask-sdk-core/dist/dispatcher/error/handler/
そのため、flash_drive_dataファイルが含まれていました。
承認された回答:
find . -not -path './flash_drive_data*' | grep "./*flash*"
ここで重要なのは、grep
find -path
が正規表現を使用している間、 シェルグロブスタイルのパターン一致を使用します。アスタリスクは、これら2つで異なる意味を持っています。
正規表現./*flash*
最初に任意の文字に一致します(.
)、次に0個以上のスラッシュ(/*
)、次にリテラル文字列flas
、次に任意の数(0個以上)のh
文字。 3/flas
それに一致します(h
の0倍) )、そして例えばreflash
(/
の0倍 。
grep flash
を使用するだけで済みます 代わりに、入力のどこにでも一致するため、先頭と末尾の「何にでも一致する」部分は不要です。
または、find -path './*flash*' -and -not -path './flash_drive_data*'
を使用します
grep "*flash*"
を置き換えたときgrep "*"
だけで 、[一致なし]を取得しました。
アスタリスクは「前のアトムの任意の数」を意味するため、ここではあまり明確に定義されていません。 grep
これは文字通りのアスタリスクとして解釈されますが、実際にはエラーである必要があります。
ただし、実行したとき:
find . -not -path './flash_drive_data*' -exec tar cfv home.tar.bz '{}' +
次のような出力を取得していました:
./flash_drive_data/index2/ask-sdk-core/dist/dispatcher/error/handler/
したがって、
flash_drive_data
ファイルが含まれていました。
tar
に注意してください ファイルを再帰的に保存し、そのfind
の最初の出力 .
現在のディレクトリの場合、すべてが保存されます。 ! -type d
find
を使用 出力からディレクトリを除外するには、または(より良い)-exclude=PATTERN
を見てください tar
のオプション 。