Macbookでファイル名のファイルを検索したい:abc.dmg
。スポットライトを使用しようとしましたが、見つかりません。findを試して使用したときに、find -name abc.dmg -path /
エラーが返されました。
Mac OSX端末でfindコマンドを使用してファイル名でファイルを検索するための適切な構文は何ですか?
Macbookでファイル名のファイルを検索したい:abc.dmg
。スポットライトを使用しようとしましたが、見つかりません。findを試して使用したときに、find -name abc.dmg -path /
エラーが返されました。
Mac OSX端末でfindコマンドを使用してファイル名でファイルを検索するための適切な構文は何ですか?
回答:
最も単純な形式でfind
は、1つのパラメーター:パスを取ります。実際に有用な形式では、パスをたどり、その後に基準を絞り込みます。
したがって、以下が必要です。
find
(プログラム)/
(パス)、および-name abc.dmg
(基準)。find / -name abc.dmg
find
事項。する必要がありますfind [path]+ [selection, grouping, and actions]
。
mdfind
コマンドは、スポットライトのデータベースを使用しています
http://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/mdfind.1.html
最も簡単な方法(既に試したことはあると思いますが、とにかくスレッドに追加してみましょう)は、任意のファインダーウィンドウの右上にある検索ボックスにabc.dmgと入力し、[ファイル表示される検索バーのオプションから「名前」を選択します。
端末は必要ありません。
また、SpotlightはSpotlightコントロールパネルで指定されたディレクトリのみをインデックス化し、abc.dmgはこれらのディレクトリのいずれかにない場合があることに注意してください。
私が間違っている場合は修正しますが、findコマンドは出力するものを知る必要があると思います:
find / -name abc.dmg -print
...結果を端末に出力する必要があります(許可エラーを含む)。
許可エラーが望ましくなく、他のユーザーディレクトリを検索する場合:
sudo find / -name abc.dmg -print
次のコマンドライン関数を使用して、関連するファイルをすばやく見つけて開くことができます。これは、スポットライトウィンドウに長い文字列のクエリを入力するよりも簡単です。
に次の関数を追加します~/.bash_aliases
。
# find any item matching search query in file name
spot(){
mdfind "kMDItemDisplayName=='*$1*'cd";
}
# restrict to files under (recursive) a specific path
findpaper(){
mdfind -onlyin "/Users/foo/articles" "kMDItemDisplayName=='*$1*'cd";
}
# default to open the first entry unless 2nd positional argument is given
openpaper(){
FILEID=$(printf "%sp" ${2:-1})
open "$(mdfind -name -onlyin "/Users/foo/articles" "kMDItemDisplayName=='*$1*'cd" | sed -n "${FILEID}")"
}
次に、どちらか、source ~/.bash_aliases
または新しいターミナルロード関数を開きます。ファイル名のどこかで単語、パイ、2016を含むファイルを検索するには、次のようにします。
spot pie*2016 #or
spot 2016*pie
*
検索パターンとしてクエリに追加または追加する必要はありません。'*$1*'
すでにクエリの最初と最後にワイルドカードエントリにタグを付けます。追加cd
は大文字と小文字を区別せず、発音区別符号を無視します。たとえばfred
、FrédéricとFrEDericの両方を返します。
findpaper
特定のパス(再帰的)での結果に検索を制限し、検索結果openpaper pie*201
(または複数の結果の最初)openpaper pie*201 3
を開くか、3番目の結果エントリを開きます。bashスクリプトまたは他の非ドキュメントファイルを開かないようにするには、追加の検索属性によってファイルの内容を制限できます。他の検索演算子の使用については、ファイルメタデータクエリ式の構文とhttps://ss64.com/osx/mdfind.htmlを参照してください。
/からルートとしてディスク上のすべてのファイルのリストをキャプチャします
sudo find / &> ~/file-list.txt
sudo chown $(whoami) ~/file-list.txt
grepを使用してファイル全体をcatし、ドライブ全体を検索します。
cat ~/file-list.txt | grep abc.dmg
正規表現を使用して、.jpgおよび.dmgファイルのみを表示します。
cat ~/file-list.txt | grep -E "(\.dmg|\.jpg)"
結果:
Applications/Visualisations/CurvedSpaces-forMac.app/Contents/Resources/Textures/paper.jpg
...等。残念ながら、マウントされたすべてのディスクもキャプチャするため、多くのリンクがあるTime Machineのディスクを取り出すのが最善です。だから、私が実行する別のウィンドウ watch tail -n 10 ~/file-list.txt
で、私の卑劣なハックでそれがどこにあるのかを示します!
sudo find / > ~/file-list.txt
シェル全体をルートとして実行するよりも良いようです。(2)のfind *
非表示(ドット)オブジェクト(存在する場合)をスキップし/
ます。(3)&>
はバシズムです。(4)の無駄な使用cat
。(5)grep abc.dmg
は印刷します/foo/bar/123abcXdmg456/baz/whatever
。//このスレッドにあなたの答えがもたらす良い点の1つは(そして他の答えはそうではありません)、ユーザーがfind
1回実行し、ファイルシステムを何度も照会せずに保存された結果を複数回再利用するアプローチです。ただし、この潜在的な利点は強調されていません。