Files

將一個文件重定向到另一個文件是UUOC(無用的cat)嗎?

  • December 18, 2015

如果我想讓 的內容file2與 的內容相匹配file1,我顯然可以執行cp file1 file2.

但是,如果我想保留內容file2 之外的所有內容 — 所有者、權限、擴展屬性、ACL、硬連結等,那麼我不想執行cp.* 在這種情況下,我只想撲通一聲中file1的內容file2

似乎以下內容會做到這一點:

< file1 > file2

但它不起作用。 file2被截斷為空而不被寫入。然而,

cat < file1 > file2

確實有效。

令我驚訝的是,第一個版本不起作用。

第二個版本是UUOC嗎?有沒有辦法在不呼叫命令的情況下僅通過使用重定向來做到這一點?

注意:我知道 UUOC 與其說是真正的反模式,不如說是一個迂腐的觀點。

*正如tniles09 發現的cp 那樣,實際上在這種情況下可以工作。

cat < file1 > file2不是UUOC。經典地,<>在系統級別執行與文件描述符重複相對應的重定向。文件描述符重複本身不會做任何事情(嗯,>重定向打開O_TRUNC,所以準確地說,輸出重定向會截斷輸出文件)。不要讓< >符號混淆你。重定向不移動數據——它們將文件描述符分配給其他文件描述符。

在這種情況下,您打開file1該文件描述符並將其分配給文件描述符0<file1== 0<file1)並將file2該文件描述符分配給文件描述符1>file2== 1>file2)。

現在您已經有了兩個文件描述符,您需要一個在兩者之間鏟取數據的程序——這就是cat目的。

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