Contents

将所有文件从一个目录链接到Linux中的另一个目录

1. 概述

在 Linux 中工作时,我们可以创建一个指向预先存在的文件的链接。此链接用作文件指针或文件引用——本质上,它用作访问原始文件的快捷方式。

在本教程中,我们将学习如何使用各种技术在 Linux 中将所有文件从一个目录链接到另一个目录。

2. 样本目录

让我们看看我们将使用的sample目录中的文件列表。我们可以在ls -l 命令的帮助下做到这一点:

$ ls -l sample
total 16
[itcodingman@blogdemo 1 bhat  bhat  1657 Jul  9  2021 file1.rtf
[itcodingman@blogdemo 1 bhat  bhat  1657 Jul  9  2021 file2.rtf

我们的 sample 目录包含两个文件:file1.rtf 和file2.rtf。 本教程的最终目标是填充另一个目录,我们将其称为samplelink,以便它包含指向sample目录中所有文件的链接。但首先,让我们了解更多关于软链接的知识。

3. 创建软链接

软链接 是为包含实际文件路径而生成的文件。它不包含原始文件的内容。我们可以使用ln 命令创建软链接。

现在让我们为我们的sample目录中的file1.rtf文件创建一个软链接:

$ ln -s file1.rtf linkfile1

使用上述命令,我们生成了一个名为linkfile1的软链接 ,它指向 file1.rtf 文件。带有 -s 选项的 ln 命令 为文件创建软链接。

我们可以在ls -l命令的帮助下检查输出:

$ ls -l
total 16
[itcodingman@blogdemo 1 bhat  bhat 1657 Jul  9  2021 file1.rtf
[itcodingman@blogdemo 1 bhat  bhat 1657 Jul  9  2021 file2.rtf
lrwxr-xr-x  1 bhat  bhat    5 Jan 22 23:15 linkfile1.rtf -> file1.rtf

此外,一旦创建了软链接文件,它的inode 编号就会与实际文件不同。我们可以在ls -i 命令的帮助下看到这一点:

$ ls -i
12746289 file1.rtf	12745765 file2.rtf	12747072 linkfile1.rtf

或者,我们可以创建一个软链接,甚至不提供链接的名称。在这种方法中,ln命令在当前工作目录中生成一个与目标文件具有完全相同名称的软链接。

现在让我们为我们的sample目录中的file1.rtf文件创建一个软链接:

$ ln -s /sample/file1.rtf

在这里,我们为 file1.rtf 文件生成了一个软链接。

让我们看看我们的结果:

$ ls -l
lrwxr-xr-x  1 bhat  bhat   17 Jan 30 23:32 file1.rtf -> /sample/file1.rtf

但是,我们必须记住,如果我们从sample目录中运行上面的示例,它不会给出预期的结果。

让我们在sample目录中再次执行相同的命令:

$ cd sample
$ ln -s /sample/file1.rtf
ln: ./file1.rtf: File exists

在上面的示例中,我们看到没有为file1.rtf文件创建软链接,并且我们收到了“*文件存在”*消息作为输出。

4.链接一个目录中的每个文件

让我们讨论一些将所有文件从一个目录链接到另一个目录的常见解决方案。

4.1.使用ln -s命令

我们可以一次为一个目录中的文件创建多个链接,并在ln -s命令的帮助下将它们存储在另一个目录中。

我们现在将在另一个名为samplelink的目录中为文件file1.rtffile2.rtf(位于我们的sample目录中)生成软链接:

$ ln -s sample/* samplelink

使用上面的命令,我们为sample目录中的所有文件生成了软链接。(*) 表示sample目录中的所有文件。samplelink目录现在应该包含指向示例目录中每个文件的链接:

$ ls -l samplelink
total 0
lrwxr-xr-x  1 bhat  bhat  16 Jan 23 22:57 file1.rtf -> sample/file1.rtf
lrwxr-xr-x  1 bhat  bhat  16 Jan 23 22:57 file2.rtf -> sample/file2.rtf

4.2. 使用ln -fs命令

我们还可以使用ln -fs命令将一个目录中的所有文件链接到另一个目录:

$ ln -fs  sample/* samplelink

这一次,我们为位于sample目录中的所有文件(由 sample/* 表示)创建了软链接。在这里,我们解析了命令行选项(-f和*-s*)。这是通过将多个单个字母选项融合到一个选项字符串中来完成的。

带有选项*-fln命令删除预先存在的目标文件,而-s*选项创建软链接。

让我们看看我们的结果:

$ ls -l samplelink
total 0
lrwxr-xr-x  1 bhat  bhat  16 Jan 24 14:27 file1.rtf -> sample/file1.rtf
lrwxr-xr-x  1 bhat  bhat  16 Jan 24 14:27 file2.rtf -> sample/file2.rtf

我们必须注意,本节讨论的任何方法都不适用于目录中的任何隐藏文件。