タグ付けされた質問 「find」

検索に関する質問については、ディレクトリ階層内のファイルを検索するコマンドラインユーティリティ。このタグは、find自体に関する質問や、findコマンドラインユーティリティの使用から発生する問題に関する質問に使用します。

4
`find`を使用して幅優先検索を実行するにはどうすればよいですか?
-depth主にはfind、それは深さ優先探索を実行させます。 ただし、デフォルトのシーケンスは幅優先検索ではありません。 デフォルトのシーケンスは、「バックトラック中に行うのではなく、ノードが最初に検出されたときにノードを処理する深さ優先トラバーサル」として非公式に説明できます。 幅優先検索が実際に必要です。どうすればfindこのように動作させることができますか? 例として、次の設定を使用します。 $ mkdir -p alpha/{bravo,charlie,delta} $ touch alpha/charlie/{alpha,beta,gamma,phi} find デフォルトの動作は次のとおりです。 $ find alpha alpha alpha/charlie alpha/charlie/alpha alpha/charlie/phi alpha/charlie/beta alpha/charlie/gamma alpha/delta alpha/bravo を使用すると-depth、次のように実行されます。 $ find alpha -depth alpha/charlie/alpha alpha/charlie/phi alpha/charlie/beta alpha/charlie/gamma alpha/charlie alpha/delta alpha/bravo alpha ただし、私が欲しいのは次の(架空の)オプションです。 $ find alpha -bfs alpha alpha/charlie alpha/delta alpha/bravo alpha/charlie/alpha alpha/charlie/phi alpha/charlie/beta …
16 find 

1
なぜ `find。-type f`は `find .`よりも時間がかかりますか?
findディレクトリの内容を再帰的にたどるには、とにかく、指定されたパスがファイルまたはディレクトリに対応するかどうかを確認する必要があるようです。 ここにいくつかの動機と、find . -type f実際にが遅いことを自分に納得させるためにローカルで行ったことがありますfind .。GNU findのソースコードをまだ掘り下げていません。 そのため、$HOME/Workspaceディレクトリ内のいくつかのファイルをバックアップし、プロジェクトの依存関係またはバージョン管理ファイルのいずれかであるファイルを除外しています。 だから私はすぐに実行される次のコマンドを実行しました % find Workspace/ | grep -v '/vendor\|/node_modules/\|Workspace/sources/\|/venv/\|/.git/' > ws-files-and-dirs.txt findパイプ処理は不適切grepな形式かもしれませんが、否定正規表現フィルターを使用する最も直接的な方法のように思えました。 次のコマンドでは、findの出力にファイルのみが含まれ、著しく時間がかかりました。 % find Workspace/ -type f | grep -v '/vendor\|/node_modules/\|Workspace/sources/\|/venv/\|/.git/' > ws-files-only.txt これらの2つのコマンドのパフォーマンスをテストするためのコードをいくつか作成しました(とdashを使用してtcsh、シェルが存在するはずのない影響を除外するためだけに)。tcsh彼らは本質的に同じだから結果が省略されています。 私が得た結果は、約10%のパフォーマンスペナルティを示しました。 -type f これは、さまざまなコマンドの1000回の反復の実行にかかった時間を示すプログラムの出力です。 % perl tester.pl /bin/sh -c find Workspace/ >/dev/null 82.986582 /bin/sh -c find Workspace/ | …
15 find  performance  gnu 

3
POSIX検索を特定の深さに制限しますか?
最近、POSIX仕様にfind-maxdepthプライマリが含まれていないことに気付きました。 それに不慣れな人にとって、-maxdepthプライマリの目的は、いくつの深findさのレベルが下がるかを制限することです。 -maxdepth 0で結果だけで処理されているコマンドライン引数。-maxdepth 1コマンドライン引数などで直接結果のみを処理します。 -maxdepthPOSIXで指定されたオプションとツールのみを使用して、非POSIX プライマリと同等の動作を取得するにはどうすればよいですか? (注:もちろん、第1オペランドとして-maxdepth 0使用するだけで同等の機能を取得できますが、-prune他の深さまでは拡張されません。)
15 find  posix 

2
特定のユーザーが作成したファイルを検索する
特定のユーザーが作成したすべてのファイルを検出して画面に表示するにはどうすればよいですか? 現在のユーザーに、すべてのファイルを表示したいユーザー名の入力を求めるスクリプトを開始しました。エラーチェックを含めることを考慮してifステートメントを使用することを考えました。 echo -e "Option 11: Display all the Files a Particular User Has Created\n\n" echo -e "Enter Username below\n" read username
15 files  find  users 


5
「検索」速度を上げる方法はありますか
findターミナルの速度を上げる方法があるのだろうか、インターネットgoogleを使用して検索することは、文字列やファイル名だけをローカルに検索するよりも高速であるとは意味がありません。 一度構築されたローカルインデックスベースを使用する方法があるのではないかと思っていますが、将来的には、findコマンドは非常に高速になります。 または他の提案? ありがとう!
15 find 


3
xargsで引数を引用する方法
1 MBを超えるフォルダー内のすべてのファイルを削除するとします。 $ find . -size +1M | xargs -0 rm これにより、名前にスペースが含まれるファイルは削除されません。だから私はそれが送信するすべての引数を引用したいrm。場合はfind、それを与えるSome report.docxことは渡す必要があります"Some report.docx"しrm。 どうやってやるの?
15 shell  find  quoting  rm  xargs 

3
-execdirで検索
で実行するfindと-execdir、期待した結果が得られません。 例えば: mkdir -p a/b/c find . -type d -execdir touch foo \; $ tree a a ├── b │ ├── c │ └── foo └── foo ディレクトリにファイルcが含まれていませんfoo。find各ディレクトリでローカルにアクセスして何かを行うにはどうすればよいですか?


2
`find -exec`を使用して、見つかったファイルのディレクトリ(現在のディレクトリではない)でコマンドを実行する方法は?
、のは、私はいくつかのサブディレクトリを持つディレクトリにいるとしましょうdir1、dir2とdir3。これらの各ディレクトリにはファイルがfooありfoo、各ディレクトリで同じコマンドを実行し、そのディレクトリ内からそのコマンドを実行したいと考えています。 「手動」で行うと、次のようになります。 cd dir1 (execute on foo) cd ../dir2 (execute on foo) cd ../dir3 (execute on foo) コマンドは、各ディレクトリから実行する必要があります。 fooバッチスケジューリングスクリプト(知りたい場合はHTCondorの場合)であり、スケジューリングスクリプトによって開始された実行の出力が各サブディレクトリで終了するように、各サブディレクトリから実行する必要があります。 「ファイルを見つけてファイルのディレクトリでコマンドを実行する」という質問は、私の知る限り、私の質問に答えません。その質問への最初の回答は私の場合には機能しない回避策の詳細であり、2番目の回答はそれを使用する方法を知るための十分な説明がありません。
15 find 

1
シンボリックリンクされたパスでは機能しないのですか?
このコマンドを実行してfind $HOME/MySymlinkedPath -name "run*.sh"も何も起こらず、エラーも発生しません(「MySymlinkedPath」は、$ HOME以外の別のハードドライブへのシンボリックリンクパスです)。 これらも失敗します: find ~/MySymlinkedPath -name "run*.sh" find /home/MyUserName/MySymlinkedPath -name "run*.sh" 念のため、この存在しないパスは(もちろん)失敗するfind $HOME/MySymlinkedPathDUMMYTEST -name "run*.sh"ため、パスは見つかりますが(エラーが発生findしないため)、検索は実行されません。 これは、cd $HOME/MySymlinkedPath最初にこのようにパス参照を削除した場合にのみ機能しますfind -name "run*.sh"が、私のスクリプトには適していません。 追加情報: このコマンドは通常どおり機能しls $HOME/MySymlinkedPath/run*.sh、そこに行ってこれcd $HOME/MySymlinkedPathを実行するとls ..、結果は期待したものではありません-シンボリックリンクが配置されているパスのリスト-実際のパスのリストが返されます別のメディア/ハードドライブ!!! pwd -P /media/MediaIdentifier/RealPath pwd /home/MyUser/MySymlinkedPath 再思考: これは問題ですfindとls、または私のシステムと?またはそれは予想され、まったく問題ではない?? 私はUbuntu 12.10を使用しています。私がテストしたすべての端末で失敗するので、端末の「問題」ではないようです。
15 find  symlink  path 


3
「find -exec」はどのようにファイル名にスペースを渡しますか?
名前にスペースが含まれるファイルを含むディレクトリがある場合、たとえば $ ls -1 dir1 file 1 file 2 file 3 これらすべてを次のように別のディレクトリに正常にコピーできます。 $ find dir1 -mindepth 1 -exec cp -t dir2 {} + ただし、の出力にfind dir1 -mindepth 1はエスケープされていないスペースが含まれます。 $ find dir1 mindepth 1 dir1/file 1 dir1/file 3 dir1/file 3 のprint0代わりに使用する場合print、出力にはエスケープされていないスペースが含まれています。 $ find dir1 mindepth 1 -print0 dir1/file 1dir1/file 2dir1/file 3 を使用してこれらのファイルを手動でコピーcpするには、スペースをエスケープする必要があります。しかし、私がコマンドを使用するか、コマンドの最後に関係なく、cpの引数が来るとき、これは不要であるようです。find+\; …

9
コマンド「date -d @xxxxxx」と「find ./」をチェーンする方法は?
1970-01-01以降のミリ秒単位で与えられるタイムスタンプの名前のディレクトリがあります: 1439715011728 1439793321429 1439879712214 . . そして、私は次のような出力が必要です: 1442039711 Sat Sep 12 08:35:11 CEST 2015 1442134211 Sun Sep 13 10:50:11 CEST 2015 1442212521 Mon Sep 14 08:35:21 CEST 2015 . . コマンドですべてのディレクトリをリストできます: find ./ -type d | cut -c 3-12 しかし、出力を次のコマンドに入れることはできません。 date -d @xxxxxx出力を操作します。 これどうやってするの?
14 shell  find  date 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.