One day I was working on something and I needed to modify the configuration file on the server. So I had to navigate to all the way through nested directories and then finally edit the file. The requirement was quite frequent and every time I had to navigate to multiple directories. This post is about to simplify the above task.
For example, We need to edit the following file.
File path : /home/alex/Softwares/apache-tomcat-7.0.62/webapps/live-service/WEB-INF/classes/conf/database/database.conf
We can do it by using the below command:
alex:~$ vim /home/alex/Softwares/apache-tomcat-7.0.62/webapps/live-service/WEB-INF/classes/conf/database/database.conf If we count the nested directories, There are 10 directories We need to navigate through and It is cumbersome even we know the exact path of the file.
We will try to do something which can reduce the effort of navigating to nested directories. eg.
The below command will work as above vim command.
alex:~$ svim database.conf
Basically, We need to make an alias for vim command which works upon command line argument. As we know most of the shell does not support aliases with the argument, So we can use the following function to create an alias svim for the vim editor.
Ok! If everything done correctly and type the below command.
alex:~$ svim database.conf
It will open the file /home/alex/Softwares/apache-tomcat-7.0.62/webapps/live-service/WEB-INF/classes/conf/database/database.conf
We can do even more by using this function.
Note: -We can use locate command instead of find for the faster execution but find is more universal and standard.
If you don't have permission to modify the .bashrc file you can use the following command.
alex:~$ vim $(find . -name \* | grep filename)
For example, We need to edit the following file.
File path : /home/alex/Softwares/apache-tomcat-7.0.62/webapps/live-service/WEB-INF/classes/conf/database/database.conf
We can do it by using the below command:
alex:~$ vim /home/alex/Softwares/apache-tomcat-7.0.62/webapps/live-service/WEB-INF/classes/conf/database/database.conf If we count the nested directories, There are 10 directories We need to navigate through and It is cumbersome even we know the exact path of the file.
We will try to do something which can reduce the effort of navigating to nested directories. eg.
The below command will work as above vim command.
alex:~$ svim database.conf
Basically, We need to make an alias for vim command which works upon command line argument. As we know most of the shell does not support aliases with the argument, So we can use the following function to create an alias svim for the vim editor.
function svim() { if [ $# -eq 0 ] then echo 'Please provide substring of the file path in the argument!'; else FPS="$(find . -name \* | grep $1)" c=0 for fp in $FPS; do if [ $c -eq 1 ] then ((c=c+1)); break; fi ((c=c+1)); done if [ $c -eq 0 ] then echo "No File Found for the path containing substring : $1" elif [ $c -eq 1 ] then if [ $# -gt 1 ] then vim +/$2 $FPS else vim $FPS fi else echo "Multiple Files Found for the path containing substring : $1" echo "Do you want to display all the files : Press 'd'" read -rsn1 ui if [[ $ui = 'd' ]] then for j in $FPS; do echo $j done fi fi fi }Copy the above function and paste into the .bashrc file. Now close the terminal and reopen it or We can use source command to reload the .bashrc
Ok! If everything done correctly and type the below command.
alex:~$ svim database.conf
It will open the file /home/alex/Softwares/apache-tomcat-7.0.62/webapps/live-service/WEB-INF/classes/conf/database/database.conf
We can do even more by using this function.
- We can use substring from the file path instead of full file name. Like
alex:~$ svim database.co - Provide a pattern in the argument which can be used as the default position of the cursor when the file got opened. Like
alex:~$ svim database.conf text It will open the file and cursor will be at first occurrence of the pattern text
Note: -We can use locate command instead of find for the faster execution but find is more universal and standard.
If you don't have permission to modify the .bashrc file you can use the following command.
alex:~$ vim $(find . -name \* | grep filename)
Comments
Post a Comment