我需要在資料夾名稱中可能有空格的系統上搜尋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
另一種選擇是使用 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