程式扎記: [Linux 常見問題] Find Files By Access, Modification Date / Time Under Linux or UNIX

標籤

2016年4月8日 星期五

[Linux 常見問題] Find Files By Access, Modification Date / Time Under Linux or UNIX

Source From Here 
Question 
I do not remember where I saved pdf and text files under Linux. I have downloaded files from the Internet a few months ago. How do I find my pdf or text files? 

How-To 
You need to use the find command. Each file has three time stamps, which record the last time that certain operations were performed on the file: 
* access (read the file’s contents) – atime
* change the status (modify the file or its attributes) – ctime
* modify (change the file’s contents) – mtime

You can search for files whose time stamps are within a certain age range, or compare them to other time stamps. You can use -mtime option. It returns list of file if the file was last accessed N*24 hours ago. For example to find file in last 2 months (60 days) you need to use -mtime +60 option. 
* -mtime +60 means you are looking for a file modified 60 days ago.
* -mtime -60 means less than 60 days.
* -mtime 60 If you skip + or – it means exactly 60 days.

So to find text files that were last modified 60 days ago, use: 
# find tmp/ -iname "*.scala" -mtime -60
tmp/Hello.scala
tmp/Hello3.scala
tmp/Hello2.scala

Display content of file on screen that were last modified 60 days ago, use: 
# find tmp/ -iname "*.scala" -mtime -60 -exec cat {} \;

Count total number of files using wc command: 
# find /home/you -iname "*.txt" -mtime -60 | wc -l

You can also use access time to find out pdf files. Following command will print the list of all pdf file that were accessed in last 60 days: 
# find /home/you -iname "*.pdf" -atime -60 -type -f

List all mp3s that were accessed exactly 10 days ago: 
# find /home/you -iname "*.mp3" -atime 10 -type -f

There is also an option called -daystart. It measure times from the beginning of today rather than from 24 hours ago. So, to list the all mp3s in your home directory that were accessed yesterday, type the command 
// -type f – Only search for files and not directories
# find /home/you -iname "*.mp3" -daystart -type f -mtime 1

-daystart option 
The -daystart option is used to measure time from the beginning of the current day instead of 24 hours ago. Find out all perl (*.pl) file modified yesterday, enter: 
# find /nas/projects/mgmt/scripts/perl -mtime 1 -daystart -iname "*.pl"

You can also list scala files that were modified 8-10 days ago. Enter: 
// Create testing data
# touch -d "5 days ago" tmp/Oldfile_5.scala
# touch -d "6 days ago" tmp/Oldfile_6.scala
...
# touch -d "11 days ago" tmp/Oldfile_11.scala
# find tmp/ -mtime +8 -mtime -10 -daystart -iname "*.scala" // Find 8-10 days 
tmp/Oldfile_9.scala
# find tmp/ -mtime +7 -mtime -10 -daystart -iname "*.scala"
tmp/Oldfile_8.scala
tmp/Oldfile_9.scala

# find tmp/ -mtime +6 -mtime -10 -daystart -iname "*.scala"
tmp/Oldfile_7.scala
tmp/Oldfile_8.scala
tmp/Oldfile_9.scala

-newer option 
To find files in the /nas/images directory tree that are newer than the file /tmp/foo file, enter: 
# find /etc -newer /tmp/foo

You can use the touch command to set date timestamp you would like to search for, and then use -newer option as follows 
# touch --date "2010-01-05" /tmp/foo

// Find files newer than 2010/Jan/05, in /data/images
# find /data/images -newer /tmp/foo


Supplement 
FAQ - How can I change the date modified/created of a file?

沒有留言:

張貼留言

網誌存檔

關於我自己

我的相片
Where there is a will, there is a way!