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 .bashrcOk! 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