1. Overview
When working in Linux, we can create a link to a pre-existing file. This link works as a file pointer or a file reference – essentially, it serves as a shortcut for accessing the original file.
In this tutorial, we’ll learn how to link all files from one directory to another in Linux using various techniques.
2. Sample Directory
Let’s see the list of files within the sample directory we’ll be using. We can do this with the help of the ls -l command:
$ ls -l sample
total 16
-rw-r--r--@ 1 bhat bhat 1657 Jul 9 2021 file1.rtf
-rw-r--r--@ 1 bhat bhat 1657 Jul 9 2021 file2.rtf
Our sample directory contains two files: file1.rtf and file2.rtf.
The ultimate goal of this tutorial is to populate another directory, which we’ll call samplelink, so that it contains links to all the files from the sample directory. But first, let’s learn a little more about soft links.
3. Creating a Soft Link
A soft link is a file generated to contain the actual file path. It does not hold the contents of the original file. We can create a soft link using the ln command.
Let’s now create a soft link for the file1.rtf file, which is within our sample directory:
$ ln -s file1.rtf linkfile1
Using the above command, we have generated a soft link called linkfile1 that points to the file1.rtf file. The ln command with the -s option creates a soft link for a file.
We can check the output with the help of the ls -l command:
$ ls -l
total 16
-rw-r--r--@ 1 bhat bhat 1657 Jul 9 2021 file1.rtf
-rw-r--r--@ 1 bhat bhat 1657 Jul 9 2021 file2.rtf
lrwxr-xr-x 1 bhat bhat 5 Jan 22 23:15 linkfile1.rtf -> file1.rtf
Also, once a soft link file is created, it’ll have a different inode number than the actual file. We can see this with the help of the ls -i command:
$ ls -i
12746289 file1.rtf 12745765 file2.rtf 12747072 linkfile1.rtf
Alternatively, we can create a soft link without even providing a name for the link. In this approach, the ln command generates a soft link – in the current working directory – that has the exact same name as the target file.
Let’s now create a soft link for the file1.rtf file, which is within our sample directory:
$ ln -s /sample/file1.rtf
Here, we have generated a soft link for the file1.rtf file.
Let’s have a look at our results:
$ ls -l
lrwxr-xr-x 1 bhat bhat 17 Jan 30 23:32 file1.rtf -> /sample/file1.rtf
However, we must keep in mind that the above example won’t give the desired result if we run it from inside the sample directory.
Let’s execute the same command again within the sample directory:
$ cd sample
$ ln -s /sample/file1.rtf
ln: ./file1.rtf: File exists
In the above example, we see that there has been no creation of a soft link for the file1.rtf file, and we’ve received the “File exists” message as output.
4. Link Every File from One Directory
Let’s discuss some common solutions for linking all files from one directory to another directory.
4.1. Using the ln -s Command
We can create multiple links at once for files in a directory and store them in another directory with the help of the ln -s command.
We’ll now generate soft links for the files file1.rtf and file2.rtf (which are within our sample directory) inside another directory called samplelink:
$ ln -s sample/* samplelink
Using the above command, we’ve generated soft links for all the files within the sample directory. The (*) represents all files inside the sample directory. The samplelink directory should now contain links to every file from the sample directory:
$ 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. Using the ln -fs Command
We can also link all files from one directory to another directory using the ln -fs command:
$ ln -fs sample/* samplelink
This time, we’ve created soft links for all the files (denoted by sample/*) that reside in the sample directory. Here, we’ve parsed the command-line options (-f and -s). This is done by fusing more than one single letter option into one option string.
The ln command with option -f deletes pre-existing destination files, and the -s option creates the soft links.
Let’s have a look at our results:
$ 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
We must note that none of the approaches discussed in this section will work for any hidden files in a directory.
5. Conclusion
In this article, we learned how to link all files from one directory to another using the ln command. In addition, we reviewed how to create a soft link for a file in Linux.