Unix find 指令幫助

Unix find 指令幫助

您好,有人可以幫我解決以下問題嗎?

find . \( -type d ! -name . -prune \) -o -type f -name "*Log*"

基本上它應該會找到名稱中包含“Log”的檔案所在的目錄。

我有這樣的結構:

/logs
  |
  |
  ----folder1
  |       |
  |       |
  |       ---App1LogDate.txt
  |
  ----folder2
  |      |
  |      |
  |      ---App2LogDate.txt
  |
  |
  |--App3LogDate.txt
  |
  |--App4LogDate.txt

因此,鑑於我將在 /logs 目錄中運行此行,我應該得到以下結果:

.
./folder1
./folder2

總共3個目錄。

答案1

有點偏左,但根據上面的描述,以下內容應該完全符合您的要求:

find . -type f -name "*Log*" -print | sed -E 's/\/[^\/]+$//' | sort | uniq

答案2

find . -name *.Log -print 

這將給出名稱以 Log 結尾的所有檔案的完整路徑。

答案3

尋找 。 (-type d !-name .-prune) -o -type d -name "紀錄

tmp$ ls
App3LogDate.txt  App4LogDate.txt  folder1  folder2
tmp$ ls folder*
folder1:
App1LogDate.txt

folder2:
App2LogDate.txt
tmp$ find . \( -type d ! -name . -prune \) -o -type d -name "*Log*"
./folder2
./folder1
tmp$

答案4

如果你有 GNU find(就像 Linux 和許多其他現代 Unix 所做的那樣),你可以使用很棒的 printf 運算子並執行以下操作:

find -type f -name '*Log*' -printf '%h\n'

您可能還想透過 a sort -u(或透過sort | uniq,視情況而定)進行管道傳輸。請注意,某些商業 UNIX 實作會將其安裝為 gfind(或具有這樣安裝它的軟體包)。

相關內容