Find

查找具有目錄路徑的文件排除子目錄

  • July 14, 2021

如何使用find遍歷目錄,但不遞歸到其子目錄?

我試過-prune了,但它不起作用。而且別無選擇-maxdepth

find /opt/projectname/bin -type f /opt/projectname/bin -prune -o -print
find: missing conjunction
/opt/projectname/bin/file_1_is_printed
/opt/projectname/bin/file_2_is_printed
/opt/projectname/bin/directory_within_bin/some_file_should_not_be_printed
/opt/projectname/bin/directory_2_within_bin/some_file_2_should_not_be_printed

/usr/bin/find:
        find.c $Date: 2011/08/12 15:04:36 $Revision: r11.31/4 PATCH_11.31 (PHCO_42158)
        libcpio.c $Date: 2008/05/27 16:08:10 $Revision: r11.31/2 PATCH_11.31 (PHCO_36666)
        $Revision: @(#) find R11.31_BL2011_0923_2 PATCH_11.31 PHCO_42158

這個問題不是重複的問題。這裡沒有 GNU。儘管這個問題可能是一個重複的問題,但發佈在這些問題上的答案要求安裝 GNU 工具。因此,如果這裡的答案有助於解決,這是一個獨特的執行緒。

錯誤“缺少連詞”是因為您在 之後重複了目錄名稱-type f,並且find不知道如何解析。

為避免遍歷子目錄,您需要修剪目錄,而不是正常文件。但是,您不能修剪起始目錄,否則find只會處理它。辨識起始目錄的一種簡單方法是將其名稱設置為..

find /opt/projectname/bin/. -name . -o -type d -prune -o -print

解釋:

  • -name .— 如果名字是.,$$ do nothing $$
  • 否則:-type d- 如果文件是目錄,則不要深入其中
  • 否則:列印路徑

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