Bash

“僅當文件夾存在時移動文件夾”不起作用

  • May 2, 2022

我試圖僅當它們存在時才將文件夾移動到不同的目錄。我試過這個

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 文件類型

引用自:https://unix.stackexchange.com/questions/701071