V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Dffcc
V2EX  ›  Linux

mv 指令

  •  
  •   Dffcc · 249 天前 · 2122 次点击
    这是一个创建于 249 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

    DESCRIPTION
    Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.
    Dffcc
        14
    Dffcc  
    OP
       248 天前
    为什么 Totol=0 ,下面却有出现目录呢?
    qeqv
        15
    qeqv  
       248 天前
    @Dffcc 这里的 total 是指本目录的文件使用了多少磁盘区块,这个目录没有文件,只有一个目录,所以是 0
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1640 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 16:51 · PVG 00:51 · LAX 08:51 · JFK 11:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.