我理解如果我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
mv
尝试将文件dir1/foo.file
和dir2/boo.file
目录移动到dir3/woo.file
。由于dir3/woo.file
不是目录,因此会失败。(您可以轻松尝试)“对于每个操作数”是指变量参数列表(由 给出
...
)。由于第二种操作形式仅在最后一个是目录时才有效,因此“最后一个操作数、斜杠和指定文件的最后一个路径名组件的连接”意味着mv
仅连接(连接)targetDirectory(最后一个参数)+“/”+相应参数的文件名(因此,没有文件夹结构关联)。即, 的“指定文件的最终路径名组件”/a/b/c
是,的c
也是。b/e/r
r
答案4
简而言之:
该命令mv
移动和/或重命名文件和/或目录。它不会复制并删除它们除非目标目录位于不同的文件系统上。(并非所有的实现mv
都支持这一点。)
如果
file.a
和file.b
是文件或目录,并且c
不存在或者它不是目录或目录的链接,则命令mv file.a file.b c
将会给出错误信息,仅此而已 :)
这意味着命令
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 目录 源...
当你想搬家时和/或重命名单个文件
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。如果您移动/重命名目录,情况也是如此。
当你想将多个文件移动到目标目录时。例如
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
-t
在要移动的文件列表之前指定目标目录。
例如mv -t /long/path/to/dir file1 file2 ...
-t, --target-directory=DIRECTORY
将所有 SOURCE 参数移动到 DIRECTORY
顺便提一句没有愚蠢的问题,只有答案才是愚蠢的:-)