我有一組檔案,比如說
file1.txt
File2.txt
File [3].txt
file 4.txt
在我的腳本中,我將每個檔案的路徑存盤在一個名為 $file 的 var 中。這是我的問題:在 bash 中,使用以下命令測驗它的存在
[[ ! -f "$file" ]]
對于像 file1.txt File2.txt 檔案 4.txt 這樣的常規檔案,將可以作業(= 系統看到該檔案存在)但不會作業(= 系統找不到該檔案 - 因為它不存在),檔案包含 []在其中,就像 File [3].txt 一樣。
我認為這是因為 [ ] 干擾了雙 [[。測驗
test ! -f "$file"
是一樣的,系統看不到它并回傳一個丟失的檔案。
我能做些什么來逃避 [ 或避免這種行為?我試圖在網上找到解決方案,但是當我鍵入“檢查檔案是否存在且檔案名包含 [”時,存在偏差,因為 [ / [[ 用于檢查存在..
謝謝你的幫助 !
編輯 - 2022-01-15 這是我正在使用的回圈
while read -r file; do
if [[ ! -f "$file" ]]; then
echo "Missing file $file"
fi
done < Compil.all ;
其中 Compil.all 是一個包含檔案路徑的文本檔案:
$cat Compil.all
/media/veracrypt1/file1.txt
/media/veracrypt1/File2.txt
/media/veracrypt1/File [3].txt
/media/veracrypt1/file 4.txt
$
因為我不想在檔案名中出現空格問題,所以我將以下代碼放在腳本的開頭。會不會是這個原因?
IFS=$(echo -en "\n\b")
uj5u.com熱心網友回復:
你是如何存盤file變數的?簡單的迭代作業如下所示:
$ ls
file1.txt File2.txt 'File [3].txt' 'file 4.txt'
$ for file in ./* ;do if [[ -f "$file" ]];then echo $file; fi; done
./file1.txt
./File2.txt
./File [3].txt
./file 4.txt
這也有效:
$ [[ ! -f "File [3].txt" ]]
$ echo $?
1
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/413538.html
標籤:
上一篇:區塊鏈復習
下一篇:區塊鏈簡單demo
