Find
等效於其他 find 實現中的 GNU find -printf 標誌
具體來說,在 mkinitcpio
find -mindepth 1 -printf '%P\0'
中使用了該命令,這是一種在沒有 -printf 標誌的情況下重新創建具有相同輸出的命令的方法。https://git.archlinux.org/mkinitcpio.git/tree/mkinitcpio這是完整的腳本,以防萬一有用。
%P
將給出從用作起點的目錄開始的文件的相對路徑,因此如果find
以some/path
作為起點執行並找到路徑名some/path/to/file
,%P
則將擴展為to/file
.當 GNU
find
沒有給出起點時(如問題中給出的命令),它將使用目前目錄 (.
) 作為起點。因此,在這種情況下,%P
格式將從./
找到的路徑中刪除。做
-printf '%P\0'
與非 GNUfind
實現相同的事情,假設-mindepth
仍然可用(如在find
BSD 系統上):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" {} +