评论删除后,数据将无法恢复
You can find files based on following three file time attribute.
In the following examples, the difference between the min option and the time option is the argument.
To find the files based up on the content modification time, the option -mmin, and -mtime is used. Following is the definition of mmin and mtime from man page.
Following example will find files in the current directory and sub-directories, whose content got updated within last 1 hour (60 minutes)
# find . -mmin -60
In the same way, following example finds all the files (under root file system /) that got updated within the last 24 hours (1 day).
# find / -mtime -1
To find the files based up on the file access time, the option -amin, and -atime is used. Following is the definition of amin and atime from find man page.
Following example will find files in the current directory and sub-directories, which got accessed within last 1 hour (60 minutes)
# find -amin -60
In the same way, following example finds all the files (under root file system /) that got accessed within the last 24 hours (1 day).
# find / -atime -1
To find the files based up on the file inode change time, the option -cmin, and -ctime is used. Following is the definition of cmin and ctime from find man page.
Following example will find files in the current directory and sub-directories, which changed within last 1 hour (60 minutes)
# find . -cmin -60
In the same way, following example finds all the files (under root file system /) that got changed within the last 24 hours (1 day).
# find / -ctime -1
The above find command’s will also show the directories because directories gets accessed when the file inside it gets accessed. But if you want only the files to be displayed then give -type f in the find command as
The following find command displays files that are accessed in the last 30 minutes.
# find /etc/sysconfig -amin -30 . ./console ./network-scripts ./i18n ./rhn ./rhn/clientCaps.d ./networking ./networking/profiles ./networking/profiles/default ./networking/profiles/default/resolv.conf ./networking/profiles/default/hosts ./networking/devices ./apm-scripts [Note: The above output contains both files and directories] # find /etc/sysconfig -amin -30 -type f ./i18n ./networking/profiles/default/resolv.conf ./networking/profiles/default/hosts [Note: The above output contains only files]
When we don’t want the hidden files to be listed in the find output, we can use the following regex.
The below find displays the files which are modified in the last 15 minutes. And it lists only the unhidden files. i.e hidden files that starts with a . (period) are not displayed in the find output.
# find . -mmin -15 \( ! -regex ".*/\..*" \)
Human mind can remember things better by reference such as, i want to find files which i edited after editing the file “test”. You can find files by referring to the other files modification as like the following.
Syntax: find -newer FILE
Following example displays all the files which are modified after the /etc/passwd files was modified. This is helpful, if you want to track all the activities you’ve done after adding a new user.
# find -newer /etc/passwd
Syntax: find -anewer FILE
Following example displays all the files which are accessed after modifying /etc/hosts. If you remember adding an entry to the /etc/hosts and would like to see all the files that you’ve accessed since then, use the following command.
# find -anewer /etc/hosts
Syntax: find -cnewer FILE
Following example displays all the files whose status got changed after modifying the /etc/fstab. If you remember adding a mount point in the /etc/fstab and would like to know all the files who status got changed since then, use the following command.
find -cnewer /etc/fstab
We have looked at many different ways of finding files using find command in this article and also in our previous article. If you are not familiar in finding files in different ways, i strongly recommend you to read the part 1.
This section explains about how to do different operation on the files from the find command. i.e how to manipulate the files returned by the find command output.
We can specify any operation on the files found from find command.
find <CONDITION to Find files> -exec <OPERATION> \;
The OPERATION can be anything such as:
# find -mmin -60 ./cron ./secure # find -mmin -60 -exec ls -l {} \; -rw------- 1 root root 1028 Jun 21 15:01 ./cron -rw------- 1 root root 831752 Jun 21 15:42 ./secure
System administrators would want to search in the root file system, but not in the other mounted partitions. When you have multiple partitions mounted, and if you want to search in /. You can do the following.
Following command will search for *.log files starting from /. i.e If you have multiple partitions mounted under / (root), the following command will search all those mounted partitions.
# find / -name "*.log"
This will search for the file only in the current file system. Following is the xdev definition from find man page:
Following command will search for *.log files starting from / (root) and only in the current file system. i.e If you have multiple partitions mounted under / (root), the following command will NOT search all those mounted partitions.
# find / -xdev -name "*.log"
Manual says only one instance of the {} is possible. But you can use more than one {} in the same command as shown below.
# find -name "*.txt" cp {} {}.bkup \;
Using this {} in the same command is possible but using it in different command it is not possible, say you want to rename the files as following, which will not give the expected result.
find -name "*.txt" -exec mv {} `basename {} .htm`.html \;
You can simulate it by writing a shell script as shown below.
# mv "$1" "`basename "$1" .htm`.html"
These double quotes are to handle spaces in file name. And then call that shell script from the find command as shown below.
find -name "*.html" -exec ./mv.sh '{}' \;
So for any reason if you want the same file name to be used more than once then writing the simple shell script and passing the file names as argument is the simplest way to do it.
Redirecting the errors is not a good practice. An experienced user understands the importance of getting the error printed on terminal and fix it.
Particularly in find command redirecting the errors is not a good practice. But if you don’t want to see the errors and would like to redirect it to null do it as shown below.
find -name "*.txt" 2>>/dev/null
Sometimes this may be helpful. For example, if you are trying to find all the *.conf file under / (root) from your account, you may get lot of “Permission denied” error message as shown below.
$ find / -name "*.conf" /sbin/generate-modprobe.conf find: /tmp/orbit-root: Permission denied find: /tmp/ssh-gccBMp5019: Permission denied find: /tmp/keyring-5iqiGo: Permission denied find: /var/log/httpd: Permission denied find: /var/log/ppp: Permission denied /boot/grub/grub.conf find: /var/log/audit: Permission denied find: /var/log/squid: Permission denied find: /var/log/samba: Permission denied find: /var/cache/alchemist/printconf.rpm/wm: Permission denied [Note: There are two valid *.conf files burned in the "Permission denied" messages]
So, if you want to just view the real output of the find command and not the “Permission denied” error message you can redirect the error message to /dev/null as shown below.
$ find / -name "*.conf" 2>>/dev/null /sbin/generate-modprobe.conf /boot/grub/grub.conf [Note: All the "Permission denied" messages are not displayed]
Audio files you download from internet mostly come with the spaces in it. But having space in the file name is not so good for Linux kind of systems. You can use the find and rename command combination as shown below to rename the files, by substituting the space with underscore.
The following replaces space in all the *.mp3 files with _
$ find . -type f -iname “*.mp3″ -exec rename “s/ /_/g” {} \;
As shown in the examples of the find command in its manual page, the following is the syntax which can be used to execute two commands in single traversal.
The following find command example, traverse the filesystem just once, listing setuid files and directories into /root/suid.txt and large files into /root/big.txt.
# find / \( -perm -4000 -fprintf /root/suid.txt '%#m %u %p\n' \) , \ \( -size +100M -fprintf /root/big.txt '%-10s %p\n' \)
评论删除后,数据将无法恢复
评论(20)
引用来自“阿昭”的评论
给爹地和给妈咪差别就是给妈咪找到的大于100M的文件给删除了,而给爹地的只是找出来是吗?
卧查,大于100M的文件,你懂的