從 unix find 指令中排除目錄列表

從 unix find 指令中排除目錄列表

我需要建立目錄中存在的文件列表,但也傳遞一個包含要排除的目錄列表的檔案。

我已經看到了下面的建議,但是當涉及到類型標誌時我沒有運氣:

find $dir_name $(printf "! -name %s " $(cat $exclude_file))

有沒有辦法可以做到這一點,或者我需要建立整個列表,然後透過它刪除與排除目錄中部分相符的列表。

答案1

鑑於您exclude_file包含路徑,而不是名稱,您需要使用它-path來匹配其條目。若要排除符合目錄的子目錄,您還需要-prune它們。這應該有效:

find . -type d \( $(printf -- "-path */%s -o " $(cat "$exclude_file")) -false \) -prune -o -print

如果您只想查看文件,則可以僅列印文件:

find . -type d \( $(printf -- "-path */%s -o " $(cat "$exclude_file")) -false \) -prune -o -type f -print

相關內容