Shell

安裝命令複製整個目錄的問題

  • May 25, 2020

所以我有一個包含我的一些配置文件的倉庫,我正在嘗試創建一個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 doffind和的方法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/{}" \\;'

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