フォルダを別のディレクトリに移動しようとしています(存在する場合のみ)。私はこれを試しました
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
ただし、スクリプトを実行するとフォルダは移動されません。質問がありますか?
答え1
テストが望むものと反対の結果を示しています。
[ ! -f $item ] || mv -v $item $project_dir/public/$item
!
とを組み合わせるとと||
事実上同じになります[ -f $item ] && ...
。
$item
つまり、通常のファイルかどうかをテストしている場合はmv
-ing です。ディレクトリは通常のファイルではなくディレクトリなので、このテストでは絶対真を返しません。-d
ではないディレクトリであることをテストする必要があります-f
。
代わりに、次のようにします(変数を二重引用符で引用することも忘れないでください)。
[ -d "$item" ] && mv -v "$item" "$project_dir/public/"
ところで、[ ! -f "$item" ] && mv ...
ディレクトリが存在しない唯一の「ファイル」ではないので、それを使用することさえ正しくありません。一般ファイル- Linuxには、ブロックデバイスノード、キャラクタデバイスノード、ソケット、名前付きパイプ、およびシンボリックリンクもあります。バラよりUnixファイルの種類