您好,有人可以幫我解決以下問題嗎?
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(或具有這樣安裝它的軟體包)。