(109) 众里寻他千百度
再来介绍下一位吧,find。
一听这名字就知道干啥的了,找文件的嘛。find俨然就是一位能力超强的图书馆管理员,只要你想在Linux下找任何文件,无论你的要求多么苛刻,find都能给你找到。你按照文件名找,没问题;你按照创建的日期找,也没问题;按用户查找,还是没问题;按照各种复杂的组合方式查找都没有问题,可以说,只有想不到,没有找不到。如果仅仅是找到那倒也没什么强大之处,最关键的是,他除了找到文件,还能帮你叫人来处理文件。咱从最简单的说吧,按文件的名字查找:find <路径> -name <文件名> 比如在当前目录下找名字叫作test.c的文件,那就是find ./ -name test.c 。如果你要找3天前创建的文件可以用-ctime参数,比如find ./ -name \*.c -ctime +3,意思就是在当前目录查找3天前创建的所有.c文件。+3就是3天前的意思,如果是-3那就是3天内。要是你想找所有的链接文件,可以依靠-type参数来根据文件类型来查找。还有根据 用户 -user,根据组-group,根据大小 -size,等等查找方式。不过这些都是些粗浅功夫,最重要的是-exec——对查找到的文件进行处理。
比如你想找/usr/bin下的所有链接文件,想看看他们都链接到了哪里,怎么办?那首先得先找到,按照类型找,find /usr/bin/ -type l,这样就找到了所有的链接文件了,可是怎么看他们链接到哪了呢?find命令是看不了,可是ls 能看阿。Ls -l就可以查看文件的详细信息,如果是链接文件就显示出连接到的地方。这时候就需要让find在找到文件之后去调用ls命令,这就用到exec了。只要这样find /usr/bin/ -type l -exec ls -l {} \; 前面不用解释,-exec 后面就是对找到的文件执行的命令,这里就是ls -l 。{}括号的位置就是用找到的文件替换的位置。比如find找到了/usr/bin/pkill,是个链接,那么-exec ls -l {}就是要执行 ls -l /usr/bin/pkill,如果写-exec ls {} -l呢,那自然就是执行ls /usr/bin/pkill -l了。这样,所有被find找到的链接文件就都会被ls一遍,就显示出了他们连接到的位置。可是/usr/bin下的链接文件很多,一屏现实不下怎么办?哈哈,自然是less或more出场了。 find /usr/bin/ -type l -exec ls -l {} \;|less怎么样,看似复杂的命令,其实也很简单吧。
很多人在Linux下听mp3的时候都遇到了标签乱码的问题,这主要是编码不统一造成的。用mid3iconv命令就可以改变mp3标签的编码。(得先安装,sudo apt-get install python-mutagen),但是一个一个的转换肯定会累死人,这时候就可以用find命令:find . -name "*.mp3" -execdir mid3iconv -e gbk {} \; 网上搜索mp3标签问题多半会搜索到这么一条命令,可能很多人执行过。这里的-execdir和-exec差不多,只不过-exec是在当前目录下执行,而-execdir是在所找到的那个文件的目录下执行。