mv 指令

206 天前
 Dffcc

https://www.bilibili.com/video/BV1qN411K7W3?p=45&vd_source=af344e7a835699396aa0d6ed5b249a45

出现在 5 分 52 秒,mv webapps.dict webapps ,因为两个都是目录,所以 webapps.dict 重新命名为 webapps ,为何 ls -l webapps 里面没东西?

mv 功能分为重命名和移动,两种到底如何区分?

2095 次点击
所在节点    Linux
15 条回复
busier
206 天前
重命名和移动本质就是同一件事!
jiaoyidongxi
206 天前
他多按了个补全 /,变成移动命令了,webapps.dict 整个文件夹移动到 webapps 里去了,他对着 webapps 里打 ls -l, 显示的是 webapps.dict 这整个文件夹。
jiaoyidongxi
206 天前
不对,不对,混乱了…… 刚在 powershell 试了下, 跟多个 / 完全无关……
jiaoyidongxi
206 天前
mv 的重命名文件夹的逻辑是当前没有相同名的文件夹才会生效,不然就会变移动命令。
Dffcc
206 天前
@jiaoyidongxi 我觉得像 1 楼讲的,纯粹只移动而己
dhb233
206 天前
https://man7.org/linux/man-pages/man1/mv.1p.html
看起来执行重命名的条件是,只有 2 个参数,并且第二个参数不是目录,或者指向目录的符号链接的情况下,才执行重命名操作。
dorothyREN
206 天前
目标是已存在的目录的话就是移动
Dffcc
206 天前
怎么越来越复杂?
cosette
206 天前
mv 命令的第二个参数如果是已经存在的目录,则执行的是移动。

移动的情况比较简单,前面的参数(目录、文件……)移动到最后一个参数(已经存在的目录)下面。mv 不会帮你自动创建不存在目录。

mv webapps.dict webapps 是把 webapss.dict 整个文件夹移动到 webapps 下面,而 mv webapps.dict/* webapps 是把 webapps.dict 文件下面的内容移动到 webapps 下面。
Dffcc
206 天前
他这样写蛮奇怪的,因为前面的父目录没写,会误会为取代
vituralfuture
206 天前
不管是移动还是重命名,都是对目录文件中的目录项(dirent)进行操作,目录项一般有两项内容:文件名,inode 号,例如重命名就是目录项记录的文件名,移动就是将一个目录项从一个目录文件中移除然后插入到另一个目录文件中

这也解释了为什么删除、移动文件不需要拥有文件的读写权限,因为这些操作只读写了文件所在的目录文件,文件并没有被碰过
SenLief
205 天前
mv 重命名和移动,我觉得最简单的理解就是,如果在同一个目录下操作就是重命名,如果不在同一目录操作就是移动,我自己用就是遵循这个逻辑。

有一种情况比较特殊,例如 mv test.txt ../a.txt 这种情况,我个人理解是先移动再重命名。
coolloves
205 天前
man mv 就有答案了
--------

DESCRIPTION
Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.
Dffcc
205 天前
为什么 Totol=0 ,下面却有出现目录呢?
qeqv
205 天前
@Dffcc 这里的 total 是指本目录的文件使用了多少磁盘区块,这个目录没有文件,只有一个目录,所以是 0

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1020896

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX