
mdfind
正しいファイル名でファイル名を取得するように求める方法はありますか?
パイプラインのある時点では、次の内容が表示されます。
(filenames are produced here) | while read f; do mdfind -name "$f" | grep -E "/$f";
2つの質問があります。
ファイル名に以下が含まれている場合
+
:grep: repetition-operator operand invalid
ファイル名に括弧が含まれている場合、結果は空です。
この問題をどのように解決できますか?
答え1
マニュアルページの機能を活用してください。 ;)
mdfindのマニュアルページは次のように言います。
-literal Force the provided query string to be taken as a literal query string, without interpretation.
このオプションがない場合、mdfind は「*」、「+」、「()」などの文字を正規表現として解釈します。
ファイル名のメタデータ属性はですkMDItemFSName
。したがって、特定の名前のファイルを見つけるには、次の手順を実行します。
mdfind -literal 'kMDItemFSName = "somefile.txt"'
mdls /path/to/somefile.txt
ボーナスのヒント:以下を使用してファイルのメタデータを確認することもできます。
答え2
ここでは正規表現は必要ないと思います。固定文字列を検索するには、grepを試してください。スイッチを使用して固定文字列の一致を有効にできます-F
。
コマンドラインが次のと仮定すると
(filenames are produced here) | \
while read f ; \
do mdfind -name "$f" | grep -F "/$f" ; \
done