はじめに
プロジェクト開発で、余計にネストしたディレクトリ構成に出くわすことがあります。
pj/backend/backend/src
これを次のように整理したいケースです。
pj/backend/src
詰まったポイント
bash でよく紹介されている以下の方法を試したところ…
shopt -s dotglob
mv backend/* .
⚠️エラー発生
zsh: command not found: shopt
原因
・Macのデフォルトシェルは zsh
・shopt はbash専用コマンド
→ zsh では別の方法を使う必要がありました
bash と zsh の違いは?
bash も zsh も、「ターミナルで使うシェル」です。
一言でいうと
・bash:昔からある標準。安定・資料が多い
・zsh:bash を進化させた高機能版。今どき・便利
bash(Bourne Again Shell)とは
・長年 Linux / Unix の標準として使用される
・サーバーや古い環境で今も多く使われている
zsh(Z Shell)とは
・bash の上位互換(より高機能)
・Mac のデフォルトシェル(Catalina 以降)
zsh は、複雑な操作を簡単に行うためのツールとしても機能します。
zsh のほうが高機能!とおぼえておくと良さそうです。
解決方法(zsh / Mac)
前提ディレクトリ構成
pj/
└── backend/
└── backend/
├── src/
├── pom.xml
├── .gitignore
└── ...
① 外側の backend に移動
cd pj/backend
② 隠しファイル(.gitignore)含めて移動
mv backend/* backend/.[!.]* backend/..?* .
これで以下がすべて移動されます。
・通常ファイル / ディレクトリ(*)
・.gitignore や .mvn などの隠しファイル
※ . や .. は除外されるため安全
③ 空になったディレクトリを削除
rmdir backend
移動後の構成
pj/
└── backend/
├── src/
├── pom.xml
├── .gitignore
└── ...
確認コマンド
ls -la
.gitignore が表示されていれば成功です。
Git 管理している場合
git status
git add .
git commit -m "Fix project structure: flatten backend directory"
mv を使っているため、
Git 上でも移動として正しく認識されます。
まとめ
・shopt は bash 専用
・Mac(zsh)では 隠しファイル込み移動は以下が安全
補足
一時的に bash を使う方法もありますが、zsh のやり方も整理しておきます。
shopt -s dotglob
mv backend/* .
exit