Find

等效於其他 find 實現中的 GNU find -printf 標誌

  • December 15, 2018

具體來說,在 mkinitcpiofind -mindepth 1 -printf '%P\0'中使用了該命令,這是一種在沒有 -printf 標誌的情況下重新創建具有相同輸出的命令的方法。https://git.archlinux.org/mkinitcpio.git/tree/mkinitcpio這是完整的腳本,以防萬一有用。

%P將給出從用作起點的目錄開始的文件的相對路徑,因此如果findsome/path作為起點執行並找到路徑名some/path/to/file%P則將擴展為to/file.

當 GNUfind沒有給出起點時(如問題中給出的命令),它將使用目前目錄 ( .) 作為起點。因此,在這種情況下,%P格式將從./找到的路徑中刪除。

-printf '%P\0'與非 GNUfind實現相同的事情,假設-mindepth仍然可用(如在findBSD 系統上):

find . -mindepth 1 -exec sh -c '
   for pathname do
       printf "%s\0" "${pathname#./}"
   done' sh {} +

嵌入的sh -c腳本將獲取一批路徑名find以進行處理,並使用標準參數擴展./從路徑名中刪除首字母,然後使用終止的空字元列印它。


同樣的事情,但有一個變數保存單個頂級目錄路徑:

topdir=/some/path

find "$topdir" -mindepth 1 -exec sh -c '
   topdir=${1%/}; shift
   for pathname do
       printf "%s\0" "${pathname#$topdir/}"
   done' sh "$topdir" {} +

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