Linux 终端基础知识#8:移动文件和文件夹
在终端基础知识系列的第八章中,了解如何在 Linux 中使用 mv 命令移动文件和目录。
剪切、复制和粘贴是日常计算生活的一部分。
在上一章中,您学习了如何在终端中复制文件和文件夹(目录)。
在终端基础知识系列的这一部分中,您将了解 Linux 终端中的剪切粘贴操作(移动)。
移动还是剪切粘贴?
好吧!剪切粘贴在这里不是正确的技术术语。这称为移动文件(和文件夹)。
由于您是命令行新手,您可能会发现术语“移动”令人困惑。
当您使用cp命令将文件复制到另一个位置时,源文件仍保留在同一位置。
当您使用 mv 命令将文件移动到另一个位置时,源文件将不再保留在原始位置。
这与您在图形文件资源管理器中执行的剪切粘贴操作(Ctrl+X 和 Ctrl+V)相同。
基本上,在命令行中移动文件可以被认为与图形环境中的剪切粘贴相同。
移动文件
Linux 有一个专用的 mv 命令(move 的缩写),用于将文件和目录移动到其他位置。
使用 mv 命令非常简单:
mv source_file destination_directory
路径的作用在这里也发挥了作用。您可以使用绝对路径或相对路径。无论哪个适合您的需要。
让我们通过一个例子来看看。 您应该通过在系统上复制示例场景来进行练习。
这是示例中的目录结构:
abhishek@linux:~/moving_files$ tree
.
├── dir1
│ ├── file_2
│ └── file_3
├── dir2
│ └── passwd
├── dir3
├── file_1
├── file_2
├── file_3
├── file_4
├── passwd
└── services
3 directories, 9 files
现在,假设我想将 file_1
移动到 dir3
。
mv file_1 dir3
移动多个文件
您可以在同一 mv 命令中将多个文件移动到另一个位置:
mv file1 file2 fileN destination_directory
让我们继续我们的示例场景来移动多个文件。
mv file_2 file_3 file_4 dir3
将文件从
dir3
移回当前目录。我们在接下来的示例中需要它们。
小心移动文件
如果目的地已有同名文件,则目的地文件将立即被替换。有时,您不会想要这样。
与 cp 命令一样,mv 命令也具有带有选项 -i
的交互模式。
而且目的是一样的。在替换目标位置的文件之前请求确认。
abhishek@linux:~/moving_files$ mv -i file_3 dir1
mv: overwrite 'dir1/file_3'?
您可以按 N 拒绝替换,按 Y 或 Enter 替换目标文件。
移动但仅更新
mv 命令带有一些特殊选项。其中之一是更新选项-u
。
这样,只有当正在移动的文件比目标文件新时,目标文件才会被替换。
mv -u file_name destination_directory
这是一个例子。 file_2 于 10:39 修改,file_3 于 10:06 修改。
abhishek@linux:~/moving_files$ ls -l file_2 file_3
-rw-rw-r-- 1 abhishek abhishek 0 Apr 4 10:39 file_2
-rw-rw-r-- 1 abhishek abhishek 0 Apr 4 10:06 file_3
在目标目录dir1中,file_2的最后修改时间为10:37,file_3的最后修改时间为10:39。
abhishek@linux:~/moving_files$ ls -l dir1
total 0
-rw-rw-r-- 1 abhishek abhishek 0 Apr 4 10:37 file_2
-rw-rw-r-- 1 abhishek abhishek 0 Apr 4 10:39 file_3
换句话说,在目标目录中,file_2 比要移动的目录旧,file_3 比要移动的目录新。
这也意味着 file_3 不会被移动,而 file_2 将被更新。运行 mv 命令后,您可以通过目标目录中文件的时间戳进行验证。
abhishek@linux:~/moving_files$ mv -u file_2 file_3 dir1
abhishek@linux:~/moving_files$ ls -l dir1
total 0
-rw-rw-r-- 1 abhishek abhishek 0 Apr 4 10:39 file_2
-rw-rw-r-- 1 abhishek abhishek 0 Apr 4 10:39 file_3
abhishek@linux:~/moving_files$ date
Tue Apr 4 10:41:16 AM IST 2023
abhishek@linux:~/moving_files$
可以看到,move命令是在10:41执行的,只有file_2的时间戳发生了变化。
您还可以使用备份选项
-b
。如果目标文件被替换,它将自动创建具有filename~
模式的备份。
故障排除:目标不是目录
如果要移动多个文件,最后一个参数必须是目录。否则,你会遇到这个错误:
target is not a directory
在这里,我创建了一个名为 dir
的文件。名字听起来像一个目录,但它是一个文件。当我尝试将多个文件移动到其中时,出现明显的错误:
但是如果将一个文件移动到另一个文件怎么办?在这种情况下,目标文件将被源文件的内容替换,同时源文件将重命名为目标文件。稍后部分将详细介绍这一点。
移动目录
到目前为止,您已经了解了有关移动文件的所有内容。移动目录怎么样?
cp 和 rm 命令使用 reusrive 选项 -r 分别复制和删除文件夹。
然而,mv 命令没有这样的要求。您可以使用 mv 命令来移动目录。
mv dir target_directory
下面是我将 dir2
目录移动到 dir3
的示例。正如您所看到的,dir2
及其内容被移动到 dir3
。
您可以用相同的方式移动多个目录。
重命名文件和目录
如果要重命名文件或目录,可以使用相同的 mv 命令。
mv filename new_name_in_same_or_new_location
假设您要重命名同一位置的文件。以下是我在同一目录中将 file_1
重命名为 file_one
的示例。
您还可以移动和重命名文件。您只需提供目标的目录路径和文件名。在这里,我将 services
文件重命名为 my_services
,同时将其移动到 dir3
。
abhishek@linux:~/moving_files$ ls
dir dir1 dir3 file_2 file_3 file_one passwd services
abhishek@linux:~/moving_files$ mv services dir3/my_services
abhishek@linux:~/moving_files$ ls dir3
dir2 my_services
您不能直接使用 mv 命令重命名多个文件。您必须将其与其他命令(例如 find 等)结合起来。
测试你的知识
是时候练习你刚刚学到的东西了。
创建一个新文件夹来练习。在这里,创建一个像这样的目录结构:
.
├── dir1
├── dir2
│ ├── dir21
│ ├── dir22
│ └── dir23
└── dir3
将文件 /etc/passwd 复制到当前目录。现在将其重命名为 secrets
。
创建三个新文件,分别命名为 file_1
、file_2
和 file_3
。将所有文件移至 dir22
。
现在将 dir22
目录移动到 dir3
。
现在删除 dir2
的所有内容。
在终端基础知识系列的倒数第二章中,您将了解如何在终端中编辑文件。敬请关注。