Linuxコマンドのディレクトリ末尾のスラッシュについて
mv
などLinuxコマンドでパスを指定するときに、ディレクトリの末尾に/
を付けるかどうかを迷いがちなので改めて整理する。
/
の有無
/
があると、
する
動作確認
まず使うディレクトリとファイルを作成
$ mkdir ~/test $ touch ~/test-dir/test.txt
mv
コマンドの動作確認
まずtest-dir
ディレクトリを~/Destkop
ディレクトリ配下に移動するとき
$ mv ~/test-dir ~/Desktop/
ちなみに移動先を表す第2引数の方は、ディレクトリと明示しても明示しなくて同じなので~/Destkop
でも~/Desktop/
でも同じ。
次にtest-dir
ディレクトリ配下のファイルを~/Desktop
ディレクトリ配下に移動するときは、test-dir
ディレクトリ配下を参照したいので/
を付ける
$ mv ~/test-dir/ ~/Desktop/
シンボリックリンクに対する挙動の違い
まずtest-dir
というディレクトリのシンボリックリンクを張る。
$ ln -s ~/test-dir ~/Desktop/test-dir-sym-link
ls -l
コマンドの挙動
ls -l
コマンドで/
をシンボリックリンクに付けずに実行すると、そのままシンボリックリンクの情報が参照される。
$ ls -l ~/Desktop/test-dir-sym-link lrwxr-xr-x 1 ryotarohayashi staff 30 2 14 22:14 /Users/ryotarohayashi/Desktop/test-dir-sym-link -> /Users/ryotarohayashi/test-dir
/
をシンボリックリンクに付けると、シンボリックリンク内のtest.txt
が参照される。
$ ls -l ~/Desktop/test-dir-sym-link/ total 0 -rw-r--r-- 1 ryotarohayashi staff 0 2 14 22:13 test.txt
ちなみにオプションなしのls
コマンドだと挙動は変わらない。
$ ls ~/Desktop/test-dir-sym-link test.txt
$ ls ~/Desktop/test-dir-sym-link/ test.txt
rm -r
コマンドの挙動
⚠︎ そもそもシンボリックリンクを削除するときはrm
ではなくunlink
を使おうというのは前提としてあって、rm -r
の挙動を確かめただけです。
まず、/
を付けないパターンは、普通にシンボリックリンクが削除される。
$ rm -r ~/Desktop/test-dir-sym-link
次に、/
を付けると、シンボリックリンク内を参照して-r
オプションで再起削除するので、シンボリックリンクは削除されずリンク元が削除される。
$ rm -r ~/Desktop/test-dir-sym-link/