Bash

使用 find,如何像 ls -F 一樣進行分類?(帶有斜杠的目錄)

  • April 8, 2021

find用來獲取文件列表,然後用 grep 對其進行路徑匹配:

$ find pc* | grep -i arthur
pc6/arthurv/untitled-2.py
pc6/arthurv/untitled-3.py
pc6/arthur.py
pc9/Arthur 4C
pc9/Arthur 4C/untitled-1.py
pc9/Arthur 4C/untitled-2.py

我想做喜歡ls -F並為每個目錄附加一個/

或者,如何查找以顯示所有匹配不區分大小寫的目錄arthur

您可以在find表達式中使用析取來實現條件處理;使用 GNU find

find pc* -type d -printf "%p/\n" -o -print

將在以匹配“pc*”的文件和目錄開頭的路徑中查找所有內容,並列印它們的名稱,如果它們是目錄,則後跟一個“/”。

其工作方式如下:

  • pc*指定開始的路徑;
  • -type d匹配目錄;
  • -printf "%p/\n"列印目前處理文件的路徑,後跟“/”和換行符;因為它緊隨其後-type d,所以只有在匹配時才會執行-type d(有一個隱式連詞);
  • -o引入析取:如果它前面的表達式不匹配,則它後面的表達式將被評估(並且它前面的表達式-type d -printf "%p/\n"在這裡,因為連接比析取具有更高的優先級);
  • -print列印目前處理文件的路徑。

find可以使用其他表達式來顯示所有匹配不區分大小寫的“arthur”的目錄:

find . -type d -iname "*arthur*"

引用自:https://unix.stackexchange.com/questions/489857