Bash
“僅當文件夾存在時移動文件夾”不起作用
我試圖僅當它們存在時才將文件夾移動到不同的目錄。我試過這個
project_dir="/home/user/Desktop/Code/projectX" public_folders=(css sass js vendor) for item in "${public_folders[@]}"; do [ ! -f "$item" ] || mv -v "$item" "$project_dir"/public/"$item" done
但是當我執行腳本時文件夾沒有移動。有什麼問題?
您的測試與您想要的相反。
[ ! -f $item ] || mv -v $item $project_dir/public/$item
與 的
!
結合||
使其有效地與 相同[ -f $item ] && ...
。即,您正在測試是否
$item
是正常文件,如果是mv
,則對其進行測試。一個目錄永遠不會對該測試返回 true,因為它不是一個正常文件,它是一個目錄。您應該測試它是否是一個目錄,-d
而不是-f
.相反,請執行此操作(請記住也要雙引號您的變數):
[ -d "$item" ] && mv -v "$item" "$project_dir/public/"
順便說一句,即使使用
[ ! -f "$item" ] && mv ...
也不正確,因為目錄不是唯一不是正常文件的“文件” ——在 Linux 上,還有塊設備節點、字元設備節點、套接字、命名管道和符號連結。請參閱Unix 文件類型