Showing posts with label findutils. Show all posts
Showing posts with label findutils. Show all posts

Wednesday, August 18, 2010

find找檔案後搭配grep找內容

給未來的裕翔

如果現在我想要知道某個目錄以下(含子目錄)

的所有包含字串aaa的檔案

find target-dir -f file -exec grep -Hn aaa {} \;

-H是把檔名列出來

-n是把行數列出來

這樣就可以知道aaa在哪個檔案的哪個行數

Tuesday, August 3, 2010

find的size

給未來的裕翔

剛發現一件事

使用find -size時

如果後面要加單位

k, M, G大小寫要一致

注意, 那個k如果大寫會有問題

但是M和G要大寫

find的rm確認

給未來的裕翔

如果使用find

要針對找到的檔案進行刪除

刪除前要先經使用者確認

find xxxxxx -exec rm -i {} \;

有個更快的喔! 那個確認動作交給find來問

find xxxxxx -ok rm {} \;

find的and和or

給未來的裕翔

這篇不是解答而是疑問

預設來講

find的每個expression是以and連接

需要or的話

可以-or或是-o

(補充, 需要not的話,可以-not或是 !)

今天我遇到一個問題

找出/底下owner非root, bin的檔案

find / -not -user root -not -user  bin -ls 2> /dev/null

一開始我想錯了, 打成

find / -not -user root -or -not -user  bin -ls 2> /dev/null

事後想想, 雖然想錯, 不過這指令應該print出更多結果才對阿!?

居然沒有, 而且結果似乎是錯的? 跟我想的完全不一樣!

有請未來的裕翔開導我^^

Friday, July 30, 2010

需要xargs的理由

給未來的裕翔

為什麼需要xargs?

我小小的大腦認為

因為不是每個指令都可以對stdin作處理的

ex: 指令a | 指令b | 指令c

指令a的output就是指令b的stdin

指令b的output就是指令c的stdin

重複一次

不是每個指令都可以對stdin作處理的

所以需要xargs

ex: 如果我想用whatis針對前面指令丟出來的幾個東西作查詢

因為whatis的用法只處理後面接的對象, ex: whatis blabla

無法ex: 指令d | whatis

所以就必須利用

指令d | xargs whatis

以上: 我小小的大腦的結論

Sunday, July 18, 2010

使用find+perm移除執行檔

給未來的裕翔

因為我想試試看opencv提供的sample裡面的3個makefile

所以每做完一個

就要把它們產生的binary移掉

想法是: 把至少具有執行的權限的檔案(目錄也可執行 但不是我要的), 全部移除

find -perm -111 -type f -exec sudo rm -f {} \;

貼心小提醒

最好是先用list, 免得牽連無辜

find -perm -111 -type f -exec sudo ls -l {} \;

ps: 先後試了GNUmakefile, makefile.gnu, makefile.ms

只有GNUmakefile可以work, 真出乎我意料

find的perm

給未來的裕翔

使用find時搭配perm選項時

我的記法是

find -perm 0744

找權限剛好和這個一樣的

find -perm -0744

找權限大於和這個一樣的. 減號可以想成下限, 至少要包含這些

find -perm +0744

找權限小於和這個一樣的. 加號可以想成上限, 最多別超過這些

再舉一個跟 suid和sgid有關的例子

鳥哥說

find / -perm +7000

只要含有s, s或t的就找出來

如果是find / -perm -7000

同時含有s, s和t的才會找出來

Sunday, May 23, 2010

檔案搜尋指令whereis, locate, find, which

給未來的裕翔

鳥哥建議先用whereis和locate, 找不到再考慮用find

當我whereis xxx的時候

會列出最後路徑最後一欄含有xxx的

如果是locate xxx

則路徑當中有etc的都會列出

ex:

which ps

=> /bin/ps

whereis

=> ps: /bin/ps /usr/share/man/man1/ps.1.gz