The built-in Linux "find" command is perhaps the most often used tool. Its applications are practically unlimited as you can search for files and execute various commands on them, depending on what you need to do. In this article, we cannot cover all of the uses for this command, however, we are going to give you an idea of how it works and provide you with a few useful examples you can use. From there, it's up to your imagination and creativity how you adjust it for a specific purpose.
The most basic example is to find out if a file exists under a specific name. Using this command, we are going to look for the "demo1" within the home directory of the user. The syntax is as follows:
find <directory path> -name "<file_name>"
Here is what happens when executed:
[[email protected] user]# find . -name "demo1" ./public_html/find_tutorial/demo1 ./public_html/find_tutorial/find_tutorials/demo1
The above example is going to look for files/folders located in the dot location, "." which means "within the current directory". It is also going to proceed recursively inside any other folder in there looking for everything that has the name "demo1". If you are interested in finding only the FILES that have the name "demo1", find has a flag "-type f" that can enable you to search for files only.
Please refer to the below example:
[[email protected] user]# find . -type f -name "demo1" ./public_html/find_tutorial/demo1
If you want to look only for directories, please replace the "-type f" with "-type d".
[[email protected] user]# find . -type d -name "demo1" ./public_html/find_tutorial/find_tutorials/demo1
Now that you know the primary use of this tool, we are going to provide you with a few examples of commands that are going to be very useful in certain situations.
Fix File/Folder permissions
find . -type d -print0 | xargs -0 chmod 0755 && find . -type f -print0 | xargs -0 chmod 0644
This command is going to change the file permissions to 644 and the folder permissions to 755 when executed in a specific folder. It is going to do this recursively and is going to affect ALL files and ALL folders inside. Of course, you can modify it to set whichever permissions you need, however, we at HostArmada advise our clients to keep their web application files with these permissions.
Check the size of files with specific extensions
The next command is handy in situations where you need to clean your hosting account. Sometimes when you have not managed your disk space in a long time, there is much clutter, and it is hard to find what is taking up a lot of disk space.
for i in `find . -maxdepth 4 -type f -name "*tar.gz"`;do du -sh $i;done | sort -h | grep G
Executing this command is going to look for all the files that have the "tar.gz" file extension and give you a list of their locations. If they are of no use to you, delete them using the rm command, which we explained in this article. A neat trick you can use here is to copy this command and paste it within a text editor such as NotePad. After that, you can modify the text after the "-name" flag to look for a different file extension. Great examples of this would be "*zip", "*log", and "*tar".
Check the total inode count in a directory
The last example here is going to help you figure out which folder utilizes the highest number of inodes (number of files).
for d in `find -maxdepth 1 -type d |cut -d\/ -f2 |grep -xv . |sort`; do c=$(find $d |wc -l) ; printf "$c\t\t- $d\n" ; done ; printf "Total: \t\t$(find $(pwd) | wc -l)\n"
When executed, this command is going to show you a list of all the folders. Furthermore, it is going to contain a number on the left side of each folder, displaying the total files they hold. On the bottom of the generated output, you are going to find the TOTAL number of inodes within all the above-listed folders. Typically, you would want to run this in the home dir of your hosting account.
[[email protected] user]# for d in `find -maxdepth 1 -type d |cut -d\/ -f2 |grep -xv . |sort`; do c=$(find $d |wc -l) ; printf "$c\t\t- $d\n" ; done ; printf "Total: \t\t$(find $(pwd) | wc -l)\n" 6041 - demo-domain.com 1 - cache 114 - .cagefs 3 - .cl.selector 5 - .cpaddons 45 - .cpanel 7 - .cphorde 4 - etc 2043 - demo-domain-2.com 1 - .htpasswds 14 - logs 1 - lscache 119 - mail 7 - perl5 2 - public_ftp 2293 - public_html 2284 - public_html1 8 - .razor 1 - sbin 1 - sed 2 - .sitepad 2 - .spamassassin 4 - .ssh 30 - ssl 2 - .subaccounts 404 - tmp 1 - .trash 2 - .vim 10 - .wp-cli Total: 13514