Я создал мягкую ссылку на текущий каталог,
$ ln -s "$PWD" math
Затем я захотел переместить его в другой каталог.
$ mv math/ ~/dirlinks/maths/
Затем я понял, что мне следует
$ mv math ~/dirlinks/maths/
Поэтому я нажимаю ctrl-c, чтобы отменить процесс до его завершения.
Я обнаружил, что есть каталог math
под ~/dirlinks/maths/
, и похоже, что файлы под .
копируются в ~/dirlinks/maths/math
, потому что я видел, что файлы под ~/dirlinks/maths/math
также появляются под .
. Но я не понимаю, потому что это mv
не cp
. Что произошло, когда я запустил mv math/ ~/dirlinks/maths/
?
Спасибо.
решение1
Давайте посмотрим, что сделала ваша первая команда: она создала символическую ссылку math
в вашем текущем каталоге, которая указывает на абсолютный путь текущего каталога. Давайте рассмотрим это немного ближе:
user@host:/free$ ls -al /free
total 4
drwxrwxrwt 2 root root 40 Oct 14 10:29 .
drwxr-xr-x 24 root root 4096 Oct 1 22:28 ..
user@host:/free$ ln -vs /free math
‘math’ -> ‘/free’
user@host:/free$ ls -al /free
total 4
drwxrwxrwt 2 root root 60 Oct 14 10:29 .
drwxr-xr-x 24 root root 4096 Oct 1 22:28 ..
lrwxrwxrwx 1 user users 5 Oct 14 10:29 math -> /free
Теперь, если вы добавите несколько файлов $PWD
и выполните перемещение:
user@host:/free$ touch a b
user@host:/free$ mv -vi math/ /tmp/Q
‘math/’ -> ‘/tmp/Q’
‘math/math’ -> ‘/tmp/Q/math’
‘math/b’ -> ‘/tmp/Q/b’
‘math/a’ -> ‘/tmp/Q/a’
removed ‘math/math’
removed ‘math/b’
removed ‘math/a’
mv: cannot remove ‘math/’: No such file or directory
По сути, он перемещает весь каталог, на который указывает, math
в место назначения. Поскольку он указывает на текущий каталог, он полностью перемещается туда, куда вы ему сказали. Если бы вы оказались где-то прямо над местом назначения, это могло бы привести к интересной проблеме зацикливания.