Cp有沒有辦法表達:
有沒有辦法表達:--link
或回退到 cp 中的普通副本(來自 GNU coreutils)?
有沒有辦法告訴
cp
(--link
即創建硬連結),但在我嘗試設備間硬連結的情況下回退?設備間連結是不可能的,並且會導致cp
失敗。我問的原因是因為我想在 a 中使用它,
GNUmakefile
並且更喜歡可讀的命令行而不是一些複雜而冗長的命令行(或函式,就此而言)。問題是針對 GNU coreutils(7.4 和 8.13)。
注意:現在解決方法類似於(GNU make recipe syntax):
cp -fl $^ $@ || cp -f $^ $@
這當然會在設備間連結的情況下給出虛假的錯誤消息,儘管隨後在第二次
cp
呼叫中成功。此外,然後它會被擴展(畢竟源表單看起來可讀)它不會再太可讀了。
cp
沒有這個選項。您可以編寫一個包裝腳本,但這很簡單。ln -f $^ $@ 2>/dev/null || cp -f $^ $@
GNU Coreutils 7.5 引入了該
--reflink
選項。如果您通過--reflink=auto
並且底層文件系統支持寫時複製(例如 Btrfs 或 ZFS)並且副本恰好在同一設備上,那麼cp
將創建一個新的 inode 但不複製內容;否則cp
執行正常複製。這仍然不是硬連結(目標始終是不同的 inode),但它可能對您的案例更好。但是,如果您使用的是不支持寫時複製的 ext4(就像現在的大多數人一樣),那麼這對您沒有幫助。