首頁 > 軟體

謹慎使用 Linux find 命令

2020-06-16 16:55:19

當使用 Linux 下的 find 命令時,請使用 -ok 選項來避免檔案被意外刪除,這個選項會在移除任何檔案之前都會請求你的許可。

最近有朋友提醒我有一個有用的選項來更加謹慎地執行 find 命令,它就是 -ok。除了一個重要的區別之外,它的工作方式與 -exec 相似,它使 find 命令在執行指定的操作之前請求許可權。

這有一個例子。如果你使用 find 命令查詢檔案並刪除它們,你可能使用的是下面的命令:

  1. $ find.-name runme -execrm{} ;

在當前目錄及其子目錄中中任何名為 “runme” 的檔案都將被立即刪除 —— 當然,你要有許可權刪除它們。改用 -ok 選項,你會看到類似這樣的東西,但 find 命令將在刪除檔案之前會請求許可權。回答 y 代表 “yes” 將允許 find 命令繼續並逐個刪除檔案。

  1. $ find.-name runme -ok rm{} ;
  2. <rm..../bin/runme >?

 

-execdir 命令也是一個選擇

另一個可以用來修改 find 命令列為,並可能使其更可控的選項是 -execdir-exec 會執行指定的任何命令,而 -execdir 則從檔案所在的目錄執行指定的命令,而不是在執行find` 命令的目錄執行指定的命令。這是兩個它的例子:

  1. $ pwd
  2. /home/shs
  3. $ find.-name runme -execdir pwd ;
  4. /home/shs/bin
  1. $ find.-name runme -execdir ls ;
  2. lsrm runme

到現在為止還挺好。但要記住的是,-execdir 也會在匹配檔案的目錄中執行該命令。如果執行下面的命令,並且目錄包含一個名為 “ls” 的檔案,那麼即使該檔案沒有執行許可權,它也將執行該檔案。使用 -exec-execdir 類似於通過 source 來執行命令。

  1. $ find.-name runme -execdir ls ;
  2. Running the /home/shs/bin/lsfile
  1. $ find.-name runme -execdir rm{} ;
  2. Thisis an imposter rm command
  1. $ ls-l bin
  2. total 12
  3. -r-x------1 shs shs 25Oct1318:12ls
  4. -rwxr-x---1 shs shs 36Oct1318:29rm
  5. -rw-rw-r--1 shs shs 28Oct1318:55 runme
  1. $ cat bin/ls
  2. echoRunning the $0 file
  3. $ cat bin/rm
  4. echoThisis an imposter rm command

 

-okdir 選項也會請求許可權

要更謹慎,可以使用 -okdir 選項。類似 -ok,該選項將請求許可權來執行該命令。

  1. $ find.-name runme -okdir rm{} ;
  2. <rm..../bin/runme >?

你也可以小心地指定你想用的命令的完整路徑,以避免像上面那樣的冒牌命令出現的任何問題。

  1. $ find.-name runme -execdir /bin/rm{} ;

find 命令除了預設列印之外還有很多選項,有些可以使你的檔案搜尋更精確,但謹慎一點總是好的。

FacebookLinkedIn 上加入 Network World 社群來進行評論。

本文永久更新連結地址https://www.linuxidc.com/Linux/2018-02/150951.htm 


IT145.com E-mail:sddin#qq.com