Bionic Beaverを実行していますが、標準(まだUnityと呼ばれていますか?)GUIでファイルを見つけることができません。フォルダーに移動すると、後でそれらのファイルを見つけることができるように見えますが、これはまだ場所がわからないファイルには役に立ちません。これらは、METAを使用してドックから検索する場合と、ファイルブラウザーからCtrl + Fを使用して検索する場合の実際には別の問題です(これはまだNautilusと呼ばれますか?)
この質問には以前のバージョンもあると思いますが、セットアップに当てはまると思われるものはまだ見つかりませんでした。
ファイルにはlocate
コマンドのインデックスが付けられますが、通常は毎日更新されるため、今日作成した新しいファイルは明日まで表示されません。 Sudo updatedb
を15分ごとに実行されるcronジョブとして配置することで、この不足を回避しました(実行に数秒しかかかりません)。
locate
コマンドは、ワイルドカードが使用されているかのように動作します。
$ time locate etc/profile
/etc/profile
/etc/profile.d
/etc/profile.d/appmenu-qt5.sh
/etc/profile.d/apps-bin-path.sh
/etc/profile.d/bash_completion.sh
/etc/profile.d/cedilla-portuguese.sh
/etc/profile.d/jdk.csh
/etc/profile.d/jdk.sh
/etc/profile.d/vte-2.91.sh
real 0m0.696s
user 0m0.671s
sys 0m0.024s
locate
コマンドの前にtime
コマンドを付けたので、暗黙のワイルドカードを使用して、インデックス付きのファイル名とディレクトリ名の検索がどれほど目まぐるしく行われるかを確認できます。
locate
出力はかなりまばらなので、エイリアスllocate
を作成して、出力を適切にフォーマットします( ロケート出力を `ll`または` ls -la`のように見せるが、もっと見やすくするには? ):
$ time llocate etc/profile
ACCESS OWNER GROUP SIZE MODIFIED NAME (updatdb last ran: 2018-07-01 11:30:05)
-rw-r--r-- root root 575 Nov 12 2017 /etc/profile
drwxr-xr-x root root 4096 Jun 4 17:19 /etc/profile.d
-rw-r--r-- root root 40 Feb 16 2017 /etc/profile.d/appmenu-qt5.sh
-rw-r--r-- root root 580 Oct 18 2017 /etc/profile.d/apps-bin-path.sh
-rw-r--r-- root root 663 May 18 2016 /etc/profile.d/bash_completion.sh
-rw-r--r-- root root 1003 Dec 29 2015 /etc/profile.d/cedilla-portuguese.sh
-rwxr-xr-x root root 301 Feb 20 2013 /etc/profile.d/jdk.csh
-rwxr-xr-x root root 299 Feb 20 2013 /etc/profile.d/jdk.sh
-rw-r--r-- root root 1941 Mar 16 2016 /etc/profile.d/vte-2.91.sh
real 0m0.760s
user 0m0.754s
sys 0m0.020s
ファイルが最後に索引付けされた時間を見出しがどのように示しているかに注目してください。探しているファイルが見つからず、その前に作成されていた場合は、Sudo updatedb
を実行してください。
time
コマンドが再び使用されるので、大量の結果が返されない限り、llocate
の使用がlocate
よりもわずかに遅いことがわかります。
locate
GUIフロントエンドglocate
locate
はCLIコマンドですが、zenity
を使用してGUIフロントを作成しました。これは、最初の「飾り気のない」フロントエンドであり、代わりにyad
を使用して改善できます。
この画面は、glocate
を起動すると表示されます:
ディレクトリ名とファイル名の全部または一部を入力できます。
glocate
は、ほとんどの場合、結果を表示するのに約1秒かかります。
以下は、使用して作成できるbashスクリプトです。
Sudo -H gedit /usr/local/bin/glocate
次に、次の行をコピーして貼り付けます。
#!/bin/bash
# NAME: glocate
# PATH: /usr/local/bin
# DESC: Provide zenity GUI front end to locate command
# DATE: Dec 24, 2018.
# NOTE: Written for: https://askubuntu.com/questions/1104069/search-is-useless-how-can-i-force-it-to-index-my-hard-drive-2018/1104112#1104112
Init () {
# Get date `Sudo updatedb` was last run
LastRun=$(stat --printf=%y /var/lib/mlocate/mlocate.db | sed 's/\.[^\n]*//')
SearchMax=10 # Search for up to 10 filenames or directories at once
}
GetSearchNames () {
SearchNames=$(zenity \
--title "glocate - updatedb last run: $LastRun" \
--text '<span foreground="blue" font="14">Enter up to 10 search names</span>' \
--forms --width=800 --height=480 \
--add-entry="Search 1" --add-entry="Search 2" --add-entry="Search 3" \
--add-entry="Search 4" --add-entry="Search 5" --add-entry="Search 6" \
--add-entry="Search 7" --add-entry="Search 8" --add-entry="Search 9" \
--add-entry="Search 10" 2>/dev/null)
Action="$?" # Glitch: When ESC pressed or Cancel clicked result is 0?
# echo "Action: $Action" # Remove leading # to debug
# Zenity not returning array like yad would. Build array manually
SearchArr=() # Reset array
for (( i=1; i<=$SearchMax; ++i)) ; do
Field="$(echo "$SearchNames"| cut -d '|' -f $i)"
[[ $Field != "" ]] && SearchArr+=("$Field")
done
# Click OK without search names?
CharacterCount=$(wc -c <<< "${SearchNames[@]}")
# echo "CharacterCount: $CharacterCount" # Remove leading # to debug
# if [[ "$Action" == 0 && "$CharacterCount" == "$SearchMax" ]] ; then
if [[ "$CharacterCount" -le "$SearchMax" ]] ; then
zenity --error --title="glocate" \
--text="No search names entered. Program will end." \
2>/dev/null
Action=99
fi
return "$Action" # 0 = Proceed with search, anything else = quit.
}
DisplaySearch () {
Result=$(locate "${SearchArr[@]}" )
zenity \
--title "locate search results" \
--text '<span foreground="blue" font="14">Scroll to see more results</span>' \
--list --separator="$IFS" --width=800 --height=480 \
--hide-header --column "Directory and filenames" \
"${Result[@]}" 2>/dev/null
}
Main () {
Init
while GetSearchNames ; do DisplaySearch ; done
}
Main
ファイルを保存して、gedit
を終了します。
次を使用して、スクリプトを実行可能としてマークします。
Sudo chmod a+x /usr/local/bin/glocate
デスクトップショートカットを作成する場合は、以下を参照してください。 デスクトップショートカットを作成する簡単な方法?
端末からスクリプトを呼び出すには、単にglocate
を使用します。
グラフィカルデスクトップ環境では、Recollを試すことができます。これは、ファイル名とファイルコンテンツを検索できる強力なツールです。
インストールしたら、man recoll
またはインターネット経由のチュートリアルを参照して詳細を確認してください。
通常、recoll
コマンドはRecollデータベースを照会するためのグラフィカルユーザーインターフェイスを起動します。
最初の実行時に、recollは最初のインデックス作成を開始する前にカスタマイズできるユーザー構成を作成します。
glocate
は@ WinEunuuchs2Unixが作成したlocate
の新しいGUIであり、別の回答で説明されています。それは非常に基本的であり、また使いやすいです。
テキスト画面またはターミナルウィンドウでは、find
およびgrep
でコマンドラインを使用できます。
find
は、ファイルを見つけるための非常に強力なツールです。例:
find / -iname "*autostart*" # to search everywhere
find ~ -iname "*autostart*" # to search in your home directory
通常のユーザーとして検索することを許可されていないディレクトリがある場合は、Sudo find ...
の昇格されたアクセス許可を使用します。詳細については、man find
またはインターネット経由のチュートリアルを参照してください。
grep
は、ファイル内のテキスト文字列を検索するための非常に強力なツールです(ファイルコンテンツを検索します)。例
grep 'alias' ~/.bashrc
詳細については、man grep
またはインターネット経由のチュートリアルを参照してください。
locate
は、更新されたデータベースがある場合にファイルを見つけるための高速ツールです。詳細については、man locate
またはインターネット経由のチュートリアルを参照してください。
locate
のデータベースを更新します
Sudo updatedb
/media
にマウントされているセカンダリファイルシステムが含まれていない場合は、構成ファイルを編集してそれを含めることができます(またはマウントポイントを/mnt
に移動しますが、ハードコードされたパス)、
cd /etc
Sudo cp -p updatedb.conf updatedb.conf.bak
Sudo nano updatedb.conf