フォルダ名にスペースが含まれる可能性があるシステムで places.sqlite を検索する必要があります。これはフォルダ名にスペースがなくても機能します。
for each in `find /home/ -name "places.sqlite" | grep -i ".mozilla/firefox"` ;do
echo "${each}"
done
出力内容: /home/itsupport/.mozilla/firefox/d2gigsya.default/places.sqlite (例)
ただし、フォルダーにスペースが含まれていると、ファイルへのパスが分割され、スクリプトが壊れてしまいます。
要約すると、このタイプのフォルダーはスクリプトで機能します。
$ sudo find /home/ -name "places.sqlite" | grep -i ".mozilla/firefox"
/home/itsupport/.mozilla/firefox/d2gigsya.default/places.sqlite
スペースを含むこのフォルダーはスクリプトでは機能しません。
$ sudo find /home/ -name "places.sqlite" | grep -i ".mozilla/firefox"
/home/itsupport/.mozilla/firefox/Random Ass Location/places.sqlite
$(command) などを使用できることはわかっていますが、ループ変数として find を使用する場合に何をすればよいかわかりません。おそらく、これは私の間違いです。とにかく、どんな助けでも大歓迎です。
答え1
find
-print0
この問題に対処するためのフラグがあります:
#!/bin/bash
find . -print0 | while read -d $'\0' file
do
echo ${file}
done
例:
$ ls
script.sh space name
$ ./script.sh
.
./script.sh
./space name
答え2
もう 1 つのオプションは、空白文字の代わりに IFS を使用して行末で分割することです。
oldIFS="$IFS"
IFS=$'\n'
for bla in ....
do
...
done
IFS="$oldIFS" # restoring to avoid surprising the rest of the script
答え3
ファイルはよく知られた場所にあるので、
for each in /home/*/.mozilla/firefox/*/places.sqlite
do echo "${each}"
done