2013-12-20 40 views
1

我試圖改變目錄,使得的目錄路徑的Perl改變所有權

chown -LR deep:deep deep/list/of/50/subdirectories 
chown -LR deep:deep deeps/list/of/50/subdirectories 

名單的所有權,但我得到的錯誤超過10個子目錄。我想寫一個Perl腳本,使其與深度和深度級別位於同一個文件夾中。我必須學習perl中的File :: path模塊。但是隻有make和rmtree函數。請有人可以幫助解決這個問題。謝謝。

回答

1

這聽起來像是你遇到了Unix對路徑名長度有限制的事實。如果您嘗試訪問深度嵌套的目錄,則路徑名太長。

您可以通過cd'ing到每個目錄解決這個問題,在一次幾級:

(cd deep/list/of; cd some/more/levels; cd and/a/few/more; ... 
    chown -LR deep:deep subdirectories) 
(cd deeps/list/of; cd some/more/levels; cd and/a/few/more; ... 
    chown -LR deep:deep subdirectories) 

括號是使所有的cd命令發生在子shell;當它完成時,您將返回到原始shell,從相同的頂級目錄開始,然後您可以從那裏處理下一個子目錄。

的路徑大小的缺省限制是<limits.h>

#define PATH_MAX  4096 /* # chars in a path name including nul */ 

儘管單個文件系統可以重寫此。

+0

謝謝您的回覆。我如何獲得路徑名的限制,或者我應該單獨進入嗎? – deep

0

如果你想在Perl中這樣做,你必須自己走目錄,像File::Find。您可以指定代碼是否更改爲新目錄(因此相對路徑更短)。

相關問題