3

約 350 枚の画像 (スキャンされたレシピ) のフォルダーがあります。それらを見つけやすくするために、bash シェル スクリプトで検索プログラムを作成しました。Mac OS X 10.8 Mountain Lion で bash バージョン 3.2 を使用しています。

私のプログラムの基本的な考え方:

  1. ユーザーに検索語を尋ねます (osascript を使用)。
  2. mdfind を使用して、検索語のファイル (名前) を検索します。
  3. 一致するファイルを (xargs を介して) ln に送信します。
  4. 「結果」ディレクトリ内の一致するファイルのハードリンクを作成します。このディレクトリは、画像の同じフォルダ内に含まれています (このディレクトリは、プログラムの開始時に消去されます)。

ディレクトリは次のようになります。

+Recipes
  -files
  -files
  -files
  +.search
     -search (shell script)
     +results
        -links
        -links

これが私のコードです:

#!/bin/bash
#
# Search program for recipes.
# version 2

# Clean out results folder
rm -rf ~/Google\ Drive/Recipes/.search/results/*

# Display the search dialog
query=$(osascript <<-EOF
        set front_app to (path to frontmost application as Unicode text)
        tell application front_app to get text returned of (display dialog "Search     for:" default answer "" with title "Recipe Search")
EOF)

# If query is empty (nothing was typed), exit
if [ "$query" = "" ]
then
    exit
fi

echo "Searching for \"$query\"."

# Search for query and (hard) link. The output from 'ln -v' is stored in results
# 'ln' complains if you search for the same thing twice... mdfind database lagging?
results=$(mdfind -0 -onlyin ~/Google\ Drive/Recipes/ "$query" | xargs -0 -J % ln -fv % ~/Google\ Drive/Recipes/.search/results)

if [ "$results" ]
then
    # Results were found, open the folder
    open ~/Google\ Drive/Recipes/.search/results/
else
    # No results found, display a dialog
    osascript <<-EOF
        beep
        set front_app to (path to frontmost application as Unicode text)
        tell application front_app to display dialog "No results found for \"" & "$query" & "\"." buttons "Close" default button 1 with icon 0
    EOF
fi

初めてでも問題なく動作します。同じものを 2 回検索すると、壊れます。

説明:「チキン」を検索するとしましょう。34 個のファイルが一致し、結果ディレクトリにハード リンクが作成されます。

ここで、もう一度プログラムを実行して、同じ「chicken」を検索します。ディレクトリが空になります (によってrm)。しかし、現在、検索/リンクは機能しなくなり、6 つまたは 7 つのレシピのみがリンクされます。起こっているように見えるのは、結果が削除された後mdfind、検索ディレクトリで結果が見つかり、リンクを作成できないことです。しかし、メインファイルが見つかりません...ln

ln: ~/Google Drive/Recipes/.search/results/recipe.jpg: no such file or directory

期待どおりに機能しないシンボリックリンクの作成に使用される mdfindを見ました。彼らは同様の問題を抱えています(しかし助けはありません)。

助けてくれてありがとう...これは長い間私を悩ませてきました。

4

2 に答える 2

1

を使用して、ディレクトリまたはファイルのインデックスを再作成できますmdimport

$ touch aa
$ mdfind -onlyin . -name aa
/Users/lauri/Desktop/aa
$ rm aa
$ mdimport .
$ mdfind -onlyin . -name aa
$ 

Spotlight はピリオドで始まるディレクトリのインデックスを作成しないため、.searchディレクトリの名前を変更するだけで済みます。

于 2012-09-19T04:40:35.323 に答える
0

Spotlight コマンドは、キャッシュされたファイル コンテンツのインデックスを使用します。そうしないように強制する方法がわかりませんmdfind。ブルート フォース アプローチはmdutil -E、ファイルを削除した後にキャッシュをクリアすることですが、そうしたくない場合があります。

于 2012-09-19T03:08:49.690 に答える