find与ls命令合体坑总结
作为⼀个⾼级系统⼯程师,当然要熟悉linux下各种命令的快速拼写。O(∩_∩)O哈哈~
然⽽,find与ls命令的快捷⽅式我们⼜知道多少了?
我们可能会⽤find / -name xxx -type f,可能会⽤ls -lrt,我们知道ls中-k代表按kg显⽰,-s代表按块显⽰,-h⽂件⼤⼩更和谐的⽅式显⽰。但很少有时间去发现有那么内置能提⾼⼯作效率提⾼⾃⼰段位的参数。我们就举⼏个好⽤的例⼦来抛砖引⽟。
1. ⾸先我们需要知道linux中⽂件的时间有以下三种:
mtime:⽂件最后内容修改时间。
ctime:⽂件最后属性改变时间,也可以叫status。可以使⽤-c代替。
atime:⽂件最后被读取时间,也可以叫access,use。可使⽤-u代替。
我们通常使⽤ls -l或ll的结果中的时间为mtime,即⽂件内容改变的时间。我们可以通过--time=atime选项来改变显⽰时间为⽂件最后读取时间,查看属性改变时间也同理。更快速的⽅法是使⽤-c或-u选项。
2. 为了让显⽰的时间更好看点,我们需要调整时间的格式:
ls -l --time-style='+%Y-%m-%d %H:%M:%S'-u
切记 --time-style要和 -l 选项⼀起使⽤。格式可以修改,⽐如'+%Y-%m-%d' 只显⽰⽇期。更简单的⽅法是:ls -l --full-time
3. 查看时间时我们⼀般都需要排序,可能通过–sort选项实现:find查命令的使用
ls -l --time-style='+%Y-%m-%d %H:%M:%S' -u --sort=time
--sort=time是指使⽤当前指定的时间(没有指定就使⽤默认mtime)来倒排。使⽤ls -lt也可以达到排序的⽬的,但这种是
按mtime排序,也是倒排。需要正排就使⽤-r来实现,如:ls -lrt。
--sort不仅可以按时间排序,还可以按⽂件⼤⼩倒排-S(⼤写)。如果--sort不够⽤,我们可以选择sort命令,⽐如:
[root@myos ~]# ls -lh --time-style='+%Y-%m-%d' | sort -k3
total 4.9M
-rw-rw-r--. 1 postgres postgres 1.5K 2017-11-08 data2.csv
-rw-r--r--. 1 postgres postgres  3982017-08-24 id_rsa.pub
-rw-rw-r--. 1 postgres postgres 4.9M 2017-11-08 data1.csv
drwxr-xr-x. 2 postgres postgres    6 2017-08-24 Desktop
-rw-rw-r--. 1 postgres postgres  822017-11-23 test.sql
sort⼀般按tab作为列分隔符,当然也可以加-t $'\t'来指定分割符
4. 接下来我们需要说说find了,终于到正题了。
我们如果需要查⼏天之前或者之后,或者某⼀天的,ls是不能实现的,所以就有了find命令:
命令解释数学解释find . -type f -mtime +5当前⽬录下5天以前的⽂件((n+1)*24h, -∞)
find . -type f -mtime 5当前⽬录下前5天的⽂件[n*24h,(n+1)*24h]
find . -type f -mtime -5当前⽬录下5天以内的⽂件(0, n*24h)这⾥我们需要注意加-type f,不然很容易踩到坑,下⾯我们会解释。
5. 但查出来的⽂件我们看不到⽂件的⽇期,所以我们需要借助ls来实现:
find . -type f -mtime +5| xargs ls -l --time-style='+%Y-%m-%d'
或者
find . -type f -mtime +5-exec ls -l --time-style='+%Y-%m-%d' {} \;
注意⼀定是{} \;别漏掉了分号。{}是指find . -type f -mtime +5的返回的结果,\;是指命令尾部标记。
结合了ls命令,我们上⾯讲到的ls的选项就都可以使⽤了。
6. 那么为什么说不加-type f使⽤find 会有问题了?因为当我们查看5天以内的⽂件的时候,竟然查出了所有
结果实验发现find . -mtime -5 输出的结果中竟然有.,即当前⽬录,即使你使⽤绝对路径find也⼀样会返回当前⽬录。此时当前⽬录被作为输出的find的返回结果⼀部分传送给ls,即 ls .,这样⾃然就把当前⽬录下的所有⽂件都打印出来了。
find命令的还能很多⽤法,man⼿册还是很意思的。如有不准确的地⽅,欢迎⼤家指正!!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。