Home > Article > Backend Development > Summary of some methods for extracting file names and directory names in Linux shell
Many times when using the Linux shell, we need to process the file name or directory name. The usual operation is to extract the file name from the path, extract the directory name from the path, extract the file suffix name, etc. . For example, extract the file name file.txt from the path /dir1/dir2/file.txt, extract the directory /dir1/dir2, extract the file suffix txt, etc.
The following introduces two commonly used methods to perform related operations.
1. Use ${}
1, ${var##*/}
The function of this command is to remove the last ' from the left of the variable var /' character and its left content, returns the right content of the last '/' (excluding this character) from the left. Usage examples and results are as follows:
#As you can see from the running results, using this command, we can extract the file name file.txt we need.
If used in a shell program file, you can use variables to save the result and then use it, such as file=${var##*/}
2, ${var# #*.}
The function of this command is to remove the last '.' character from the left of the variable var and the content to the left, and return the last '.' from the left ( does not contain this character). Usage examples and results are as follows:
#As you can see from the running results, using this command, we can extract the file suffix we need.
If the file has more than one suffix, for example, file.tar.gz, the command ${var##*.} can only extract the last suffix, and what should I do if I want to extract tar.gz? Then you need to use the ${var#*.} command mentioned below.
3, ${var#*.}
The function of this command is to remove the first '.' character from the left of the variable var and the content on the left. Returns the content to the right of the first '.' (excluding this character) from the left. Usage examples and results are as follows:
# As you can see from the running results, multiple suffixes of the file can be extracted using this command.
4, ${var%/*}
The use of this command is to remove the first '/' character from the right side of the variable var and the content on the right side. Returns the content to the left of the first '/' (excluding this character) from the right. Usage examples and results are as follows:
As you can see from the running results, using this command, we can extract the directory where the files we need are located
5 , ${var%%.*}
The use of this command is to remove the last '.' character from the right side of the variable var and the content on the right side, and return the last '.' character from the right side of the variable var. The content to the left of a '.' (without this character). Usage examples and results are as follows:
When we need to create a directory with the same name as the file name (without suffix) corresponding to the corresponding file, we can use this command to operate. For example, the situation of decompressing files is similar to this. When we compress the file file.zip, a directory named file will be created in the same directory as file.zip.
6, ${} summary
In fact, ${} is not specifically used to extract file names or directory names. It is used to extract and replace variables, etc. It can extract a lot of content, not necessarily '/' or '.' in the five examples above. In other words, the above usage method is just a special case of its use.
Seeing the above commands may make people feel very difficult to understand and remember, but in fact, they are all regular.
#: represents the first
% from the left: represents the first
## from the right: Represents the last
from the left. %%: Represents the last
from the right. In other words, # always means counting from the left, % Always means counting from the right.
*: Indicates the content to be deleted. In the case of # and ##, it is located to the left of the specified character ('/' and '.' in the example), which means deleting the specified character and the content to its left; In the case of % and %%, it is located on the right side of the specified character ('/' and '.' in the example), indicating that the specified character and the content to its right are deleted. The positions of '*' here cannot be interchanged, that is, the * sign cannot be placed to the right of # or ##, and vice versa.
For example: ${var%%x*} means to find the last character x from the right, and delete the character x and the characters to its right.
When you see this, you can know that this command is actually very versatile. The above are just some special cases of extracting the naming properties of pointer file names and directory names.
2. basename and dirname
${} are not commands specifically designed to extract file names and directory names, so the basename and dirname commands are specifically designed to do this. Ready.
1. basename
The function of this command is to extract the file name from the path. The usage method is basename NAME [SUFFIX].
1) Extract the file name (with suffix) from the path. The example is as follows:
2) As you can see from the usage of the above command, The suffix (SUFFIX) is optional. Therefore, if you only want to extract the file name file without a suffix, you can also add a suffix name after the variable. The example is as follows:
2, dirname
The function of this command is to extract the directory name from the path. The usage method is dirname NAME
The usage example is as follows:
In this way, the directory where the file.txt file is located is extracted.
Note: This command can not only extract the directory where ordinary files are located, it can also extract the directory where any file is located, such as the directory where the directory is located, as follows:
It extracts the directory dir1 where the directory dir2 is located.
The above is the entire content of this article. I hope it will be helpful to everyone's learning, and I also hope that everyone will support the PHP Chinese website.
For more Linux shell methods to extract file names and directory names, please pay attention to the PHP Chinese website for related articles!