ただの技術メモ

個人備忘録

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/