Shell
安裝命令複製整個目錄的問題
所以我有一個包含我的一些配置文件的倉庫,我正在嘗試創建一個
makefile
將它們安裝在 homedir 中。我遇到的問題是,當我直接在 bash 中執行以下命令時install -m 755 -d ~/path/to/dotfilesDir/ ~/
似乎什麼都沒有發生,而
install -m 755 ~/path/to/dotfilesDir/{file1,file2,...} ~/
按預期工作。
為什麼第一個(更簡單和更清潔的)解決方案不起作用?
從手冊頁看,似乎
install
不會做你想做的事。事實上,概要部分指出了以下形式的用法:
install [OPTION]... -d DIRECTORY...
後來,手冊頁說:
-d, –directory
將所有參數視為目錄名稱;創建指定目錄的所有組件
所以在我看來,這個選項的重點是能夠安裝一個複雜的(但空的)目錄結構 à la
mkdir -p ...
。你可以用循環完成你想要的:
for file in /path/to/DotFiles/dir/*;do install -m 755 "$file" ~/ done
或者,如果下面有很多級別
/path/to/DotFiles/dir
,您可以使用find
:find /path/to/DotFiles/dir/ -type f -exec 'install -m 755 "{}" ~/' +
從@Joseph R. 的回答開始,這是我讓它與 find 一起工作的解決方案,因為我無法讓他的命令工作。(我不認為是這樣,因為規則適用於
\+
: 元素之後不能有任何{}
內容。)(我無法評論。這整個段落實際上可以刪除。)要將所有文件複製到完全相同的目錄(此處
target/directory
):find directory/to/copy -type f -exec install -Dm 755 "{}" "target/directory" \;
-D
這裡不是強制性的,它只會為目標創建不存在的目錄。要從您目前所在的位置開始複製整個目錄層次結構及其文件(這將省略空目錄):
find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \;
如前所述,這將從 重新創建樹
$PWD
。另外,如果您需要複製空目錄, on 可以找到使用-type d
offind
和的方法install -d
。所以,為了複製樹,從一個不是的目錄開始
$PWD
:(cd parent/directory && find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \;)
注意如何
parent/directory
不被複製。額外的
對於那些使用
shell/fish
,這是執行相同操作的行:fish -c 'cd parent/directory; and find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \\;'