Path

-p1 刪除根斜線等等

  • October 31, 2018

我了解patch在刪除某些路徑組件時允許修補應用程序。

雖然參數將按原樣-p0處理路徑:

/var/www/html/example.com

-p1將刪除根斜線,因此我們使用的路徑變為:

var/www/html/example.com

為什麼要刪除根斜杠(或路徑的任何先前組件),而不僅僅是使用完整路徑進行修補?

我可以看到通過相對路徑加深目錄樹的邏輯,但我想念它在絕大多數情況下是否實用或有用。

patch實用程序是一個 POSIX 實用程序,該實用程序標準規範中的基本原理部分給出了該-p選項的用法範例:

-p選項可以將更新檔文件自定義為本地使用者目錄結構,而無需手動編輯更新檔文件。例如,如果更新檔文件中的文件名是:

/curds/whey/src/blurfl/blurfl.c

設置-p 0不修改整個路徑名;-p 1給出:

curds/whey/src/blurfl/blurfl.c

沒有前導<slash>-p 4給出:

blurfl/blurfl.c

並且根本不指定 -p 給出:

blurfl.c

OpenBSD 手冊也有一個類似但略微擴展的範例,說明何時使用可能-p有用(我強調):

-p strip-count,--strip strip-count

設置路徑名條數,它控制如何處理在更新檔文件中找到的路徑名,以防您將文件保存在與發送更新檔的人不同的目錄中。剝離計數指定要從路徑名的前面剝離多少個斜杠。(任何介入的目錄名稱也會消失。)例如,假設更新檔文件中的文件名是/u/howard/src/blurfl/blurfl.c

設置-p0使整個路徑名保持不變。

-p1

u/howard/src/blurfl/blurfl.c

沒有前導斜線。

-p4

blurfl/blurfl.c

它接著說:

根本不指定-p只會給您blurfl.c,除非前導路徑 ( u/howard/src/blurfl) 中的所有目錄都存在並且該路徑是相對的,在這種情況下,您將獲得未修改的整個路徑名。無論您最終得到什麼,都將在目前目錄或-d選項指定的目錄中查找。

也就是說,如果您獲得了一個更新檔,其中包含它所應用的文件的絕對路徑,並且您將這些文件保存在不同的目錄中,那麼您可以使用-p適當的數字來“偏移”更新檔中的路徑。由-d(或目前目錄)指定的目錄。

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