请解释命令 mv 的手册页

请解释命令 mv 的手册页

我理解如果我mv foo.file boo.file,我只需将 foo.file 重命名为 boo.file,如果我mv dir1/foo.file dir2/boo.file,我删除 dir1/foo.file 并将其复制到 dir2 并将其重命名为 boo.file。但我正在查看此处的手册页:

NAME
     mv -- move files

SYNOPSIS
     mv [-f | -i | -n] [-v] source target
     mv [-f | -i | -n] [-v] source ... directory

DESCRIPTION
     In its first form, the mv utility renames the file named by the source
     operand to the destination path named by the target operand.  This form
     is assumed when the last operand does not name an already existing direc-
     tory.

     In its second form, mv moves each file named by a source operand to a
     destination file in the existing directory named by the directory oper-
     and.  The destination path for each operand is the pathname produced by
     the concatenation of the last operand, a slash, and the final pathname
     component of the named file.

我有两个问题:1. 我知道“...”表示可重复参数,那么如果我这样做mv dir1/foo.file dir2/boo.file dir3/woo.file,会发生什么?2. 我不太明白第二段关于“ The destination path for each operand is the pathname produced by the concatenation of the last operand, a slash, and the final pathname component of the named file.”的第二种形式,“对于每个操作数”和“最后一个操作数、斜杠和命名文件的最后一个路径名组件的连接”是什么意思?

抱歉,我知道这些问题很愚蠢

答案1

mv有两种形式:

第一的:

mv [-f | -i | -n] [-v] source target

第二:

mv [-f | -i | -n] [-v] source ... directory

要回答你的第一个问题,第二形式中,您有“...”,这意味着您可以有多个源,但只有一个目标,特别是一个目录,因此您可以这样做:

mv 1.txt 2.txt 3.txt new

它会将这三个文件移动到之前创建的名为的目录中new


回答你的第二个问题,它只是说移动文件的新路径将是目录加上文件的原始名称。 是last operand目标目录,final pathname是文件的名称,

答案2

如果传递给的最后一个参数mv是现有目录,它会将先前列出的文件移动到该目录中。它必须是现有目录,否则尝试mv单个文件时会不清楚是更改名称还是移动到具有相同文件名的新目录中。手册页中的语言比我在这里说的更正式和具体(并且更直接地解释了代码的作用),力求准确回答有关在某些文件mv或目录名称不寻常的奇怪情况下如何工作的问题。

不,这不是一个愚蠢的问题。

答案3

  1. mv尝试将文件dir1/foo.filedir2/boo.file目录移动到dir3/woo.file。由于dir3/woo.file不是目录,因此会失败。(您可以轻松尝试)

  2. “对于每个操作数”是指变量参数列表(由 给出...)。由于第二种操作形式仅在最后一个是目录时才有效,因此“最后一个操作数、斜杠和指定文件的最后一个路径名组件的连接”意味着mv仅连接(连接)targetDirectory(最后一个参数)+“/”+相应参数的文件名(因此,没有文件夹结构关联)。即, 的“指定文件的最终路径名组件”/a/b/c是,的c也是。b/e/rr

答案4

简而言之:
该命令mv移动和/或重命名文件和/或目录。它不会复制并删除它们除非目标目录位于不同的文件系统上。(并非所有的实现mv都支持这一点。)

  1. 如果file.afile.b是文件或目录,并且c不存在或者它不是目录或目录的链接,则命令

    mv file.a file.b c
    

    将会给出错误信息,仅此而已 :)

  2. 这意味着命令

    mv dir1/file.a dir2/file.b C
    

    与以下写法相同:

    mv dir1/file.a  C/file.a
    mv dir2/file.b  C/file.b
    

进一步来说:

命令mv 移动(重命名)文件至少在我的系统中,形式:

mv [选项]... [-T] 源 目标
mv [选项]... 源... 目录
mv [选项]... -t 目录 源...

  1. 当你想搬家时和/或重命名单个文件

    • mv file.a file.b或者mv dir.a dir.b #简单重命名。
      它会将 重命名file.a为新名称file.b
      注意:它是同一个文件。如果您ls -i file.a之前执行过 ,ls -i file.b您会注意到相同数量的 inode。这意味着通常你没有复制文件并删除旧文件
    • mv OldPath/file.a NewPath/file.a # 简单移动
      再次,前后文件具有相同的 inode。如果您移动/重命名目录,情况也是如此。
    • mv OldPath/file.a NewPath/file.b # 移动和重命名
      它将文件从 OldPath 移动并重命名为 NewPath。同样,前后文件具有相同的 inode。如果您移动/重命名目录,情况也是如此。
  2. 当你想将多个文件移动到目标目录时。例如

    mv dir1/file1 dir2/file2 ... /long/path/to/dir     
    

    就像写:

    mv dir1/file1 /long/path/to/dir/file1
    mv dir2/file2 /long/path/to/dir/file2
    
  3. -t在要移动的文件列表之前指定目标目录。
    例如mv -t /long/path/to/dir file1 file2 ...

    -t, --target-directory=DIRECTORY
    将所有 SOURCE 参数移动到 DIRECTORY


顺便提一句没有愚蠢的问题,只有答案才是愚蠢的:-)

相关内容