[解決済み】shでfindの'-prune'オプションを使用するには?
質問
の例がよくわからないのですが。
man find
どなたか、例題や解説をお願いします。正規表現を組み合わせてもいいのでしょうか?
より詳細な質問はこのようなものです。
シェルスクリプトを書きましょう。
changeall
のようなインターフェイスを持ち、そのインターフェイスは
changeall [-r|-R] "string1" "string2"
. の接尾辞を持つすべてのファイルを検索します。
.h
,
.C
,
.cc
または
.cpp
を変更し
string1
を
string2
.
-r
は、現在のディレクトリにのみ留まるか、サブディレクトリを含むかを指定するオプションです。
注意
-
非再帰の場合。
ls
は使用できないのでfind
とsed
. -
試してみた
find -depth
が、サポートされていませんでした。そのため、私は-prune
の例がよくわからなかったのです。man find
.
EDIT2: 私は課題をやっていたので、自分で仕上げたいので、あまり詳しく質問していませんでした。私はすでにそれをやって、それを提出したので、今私は全体の質問を述べることができます。また、私は何とかして
-prune
しかし、いずれにせよ、学びたいと思います。
解決方法は?
私が紛らわしいと思ったのは
-prune
は、アクションであること(たとえば
-print
のような)テストではありません。
-name
). これは "ToDo"リストを変更するものです。
を返しますが、常に真
.
を使用する一般的なパターンです。
-prune
はこうです。
find [path] [conditions to prune] -prune -o \
[your usual conditions] [actions to perform]
このような場合、ほとんどの場合
-o
(論理和)の直後に
-prune
というのも、このテストの最初の部分(~を含む)が
-prune
を返します。
false
は、実際に欲しいもの(つまり、あなたが
しない
を削除したい)。
以下はその例です。
find . -name .snapshot -prune -o -name '*.foo' -print
これは、".snapshot" ディレクトリの下にない "*.foo" ファイルを見つけます。この例では
-name .snapshot
が構成されます。
[conditions to prune]
であり、かつ
-name '*.foo' -print
は
[your usual conditions]
と
[actions to perform]
.
重要なお知らせ :
-
結果を表示したいだけなら、通常は
-print
アクションを使用します。あなたは一般的に しない を使用する場合、そのようなことはしたくありません。-prune
.findのデフォルトの動作は、"and"です。 全体 式に
-print
以外のアクションがない場合は-prune
(皮肉にも)最後に つまり、これを書くとfind . -name .snapshot -prune -o -name '*.foo' # DON'T DO THIS
は、こう書くことと同じです。
find . \( -name .snapshot -prune -o -name '*.foo' \) -print # DON'T DO THIS
というのは、刈り込み対象のディレクトリの名前も出力してしまうからで、これは通常望むところではありません。代わりに、明示的に
-print
アクションを実行します。find . -name .snapshot -prune -o -name '*.foo' -print # DO THIS
-
もし、quot;通常条件" が、prune 条件にもマッチするファイルに偶然マッチした場合、それらのファイルには ではない が出力に含まれます。これを修正する方法は
-type d
の述語をプルーン条件に追加します。例えば、ディレクトリの先頭が
.git
(という名前のものを削除すればよいのです(これはたしかに、やや作為的なものです。 まさに.git
のようなファイルを含むすべてのファイルを見たいと考えていました。.gitignore
. こうしてみてはどうだろう。find . -name '.git*' -prune -o -type f -print # DON'T DO THIS
この場合 ない インクルード
.gitignore
を出力します。以下は修正版です。find . -name '.git*' -type d -prune -o -type f -print # DO THIS
おまけのヒント: GNUバージョンの
find
,
の texinfo ページを参照してください。
find
には、そのマニュアルページよりも詳細な説明があります (ほとんどの GNU ユーティリティに言えることですが)。
関連
-
[解決済み] 正規表現で特定の単語を否定する方法は?重複
-
[解決済み] Linuxで特定のテキストを含むすべてのファイルを検索するにはどうすればよいですか?
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで文字列変数を連結する方法
-
[解決済み] Bashで文字列が部分文字列を含むかどうかをチェックする方法
-
[解決済み] scpを使ってリモートからローカルにフォルダをコピーするにはどうしたらいいですか?
-
[解決済み] ワイルドカードマッチングに基づいて、現在のフォルダとサブフォルダ内のすべてのファイルを再帰的に検索するにはどうすればよいですか?
-
[解決済み] find .コマンドでディレクトリを除外する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] /bb|[^b]{2}/ どのように機能するのですか?[クローズド]
-
[解決済み] 正規表現の主題文字列で空白を無視するには?
-
[解決済み] SQLite のクエリで正規表現を使うにはどうしたらいいですか?
-
[解決済み] 2回目以降で一致する
-
[解決済み] 文字列の完全一致のための正規表現
-
[解決済み] Regex空の文字列または電子メール
-
[解決済み] awk で gsub を使ってファイル中の ("./") と (".txt") の文字を検索・置換する方法
-
[解決済み] find .コマンドでディレクトリを除外する方法
-
[解決済み] 検索」からすべての「permission denied」メッセージを除外するにはどうすればよいですか?
-
[解決済み】この/現在の/ドットフォルダを "タイプd "の検索から除外する方法