回答
從上面的原&新目錄開始,我覺得這對find(1)
命令會做你需要的東西:
find original -type d -exec mkdir new/{} \;
find original -type f -exec ln -s {} new/{} \;
一審通過對原來的樹只發現目錄設置目錄結構和在新樹中重新創建它們。第二個創建符號鏈接到新樹中的原始文件。
這對我來說非常好(如上所述,cp -as或-Rs在Mac OS X上不起作用)。 '(cd origParentDir; find origDir ..; find origDir ..)'可能是一個好主意,以便爲mkdir和ln -s獲取相對路徑作爲參數。使用parantheses來啓動'('subshell')',因爲在子shell中運行cd只會臨時設置CWD;當子shell退出時,CWD被恢復。例如。如果您將'/ src/binutils-2.24'複製到'$ {HOME}/source',那麼您不希望創建'src''文件夾。 – 2014-10-10 01:46:46
奇怪的是'ln'沒有遞歸選項...就像'ln -s -R orig/dir dest/dir'。 – jiggunjer 2016-10-07 03:35:00
我只是在一個linux盒子上做了一個快速測試,並且cp -sR /orig /dest
的確如你所描述的那樣:創建一個目錄層次結構,其中非目錄的符號鏈接返回到原始目錄。
它僅適用於第一個目錄級別。對於子目錄中的每個文件,我都會得到「xyz-file:只能在當前目錄中創建相對符號鏈接」。 (在Ubuntu 8.10上,cp版本6.10) – 2009-08-10 03:48:44
您得到「xyz-file:只能在當前目錄中生成相對符號鏈接」的原因是因爲對於源目錄,您指定了一個相對路徑。如果您爲源指定絕對路徑,它將按照您的需要工作,如下所示:「cp -sR/root/absolute/path/name dest」。 – PonyEars 2011-09-03 00:34:12
如果您需要/想要使所有符號鏈接相對,可以使用[符號鏈接](http://www.linuxcommand.org/man_pages/symlinks8.html),如下所示:'cp -sR/orig/dest &&符號鏈接 - rc/dest' – 2014-02-04 02:38:10
還有一個「lndir」工具(來自X),它可以做這樣的事情;我發現它在這裏提到:Debian Bug report #301030: can we move lndir to coreutils or debianutils?,我現在很高興地使用它。
作爲原始提問者,我遇到了確切的問題,並且在開始編寫shell腳本後,發現此答案並發現已安裝lndir。完全按照我需要的方式工作。 – shmuelp 2009-10-06 19:02:35
cp -as /root/absolute/path/name dest_dir
會做你想做的。請注意,源名稱必須是絕對路徑,它不能是相對的。否則,你會得到這個錯誤:「xyz-file:只能在當前目錄中建立相對的符號鏈接。」
此外,要小心,因爲你所拷貝:如果dest_dir將已經存在,你必須做一些事情,如:
cp -as /root/absolute/path/name/* dest_dir/
cp -as /root/absolute/path/name/.* dest_dir/
如果你覺得你的手髒 這裏有個竅門這將自動創建目標文件夾,子文件夾和符號鏈接所有文件遞歸。
在你想要的文件符號鏈接和子文件夾的文件夾:
創建一個文件殼。SH:
nano shell.sh
- 複製並粘貼此魔術師:
#!/bin/bash
export DESTINATION=/your/destination/folder/
export TARGET=/your/target/folder/
find . -type d -print0 | xargs -0 bash -c 'for DIR in "[email protected]";
do
echo "${DESTINATION}${DIR}"
mkdir -p "${DESTINATION}${DIR}"
done' -
find . -type f -print0 | xargs -0 bash -c 'for file in "[email protected]";
do
ln -s "${TARGET}${file}" "${DESTINATION}${file}"
done' -
- 保存文件
ctrl+O
- 關閉文件
ctrl+X
使你的腳本執行
chmod 777 shell.sh
運行腳本
./shell.sh
快樂黑客!
- 1. 按層次結構複製記錄?
- 2. 如何將目錄符號鏈接複製爲目標鏈接?
- 3. 從git分支創建符號鏈接文件層次結構
- 4. 複製目錄並創建上層目錄結構
- 5. 層次結構或一個目錄
- 6. 在層次目錄結構錯誤
- 7. 從符號鏈接目錄
- 8. 符號鏈接目錄
- 9. 複製與符號鏈接
- 10. 如何複製包含符號鏈接的整個目錄?
- 11. 複製包含符號鏈接的繼承目錄
- 12. 鏈接到層次結構較低的頁面的鏈接href
- 13. radgridview層次結構
- 14. 層次結構
- 15. 如何僅在創建符號文件鏈接時複製遞歸目錄結構?
- 16. 複製層次
- 17. Visual Studio鏈接文件目錄結構
- 18. 「Unix目錄是‘鏈接’結構列表」
- 19. 複製帶有指向複製文件的符號鏈接的目錄(內部目錄樹)
- 20. 使用wix複製目錄結構
- 21. 複製鏈接列表中的結構
- 22. 遞歸目錄大小包括符號鏈接兩次
- 23. 目錄映射符號鏈接
- 24. PHP符號鏈接到子目錄
- 25. 無法符號鏈接到.git目錄
- 26. Netbeans掃描符號鏈接目錄
- 27. 檢查目錄是否符號鏈接?
- 28. 查找目錄中的符號鏈接
- 29. 遞歸符號鏈接的目錄樹
- 30. 在Java中複製複雜對象層次結構
另請參閱http://unix.stackexchange.com/q/196537/10047。 – user905686 2016-07-26 17:28:04