Command-Line

使用命令行製作單個文件的多個副本的替代解決方案?

  • February 29, 2016

我正在嘗試將文件複製到 10 個文件。例如,我有一封名為 的電子郵件test1.eml。我想要同一個文件的 10 個副本。

當我在網際網路上搜尋時,我遇到了這個 stackoverflow 執行緒https://stackoverflow.com/questions/9550540/linux-commands-to-copy-one-file-to-many-files並遵循其中之一提到的 eval 命令社區成員“knittl”。

eval 'cp test1.eml 'test{2..10}.eml';'

上述命令有效,符合我的要求。是否有任何其他替代/更優雅的命令來實現這一點,因為提到 eval 命令的人告訴它是一種骯髒的黑客。

我會做類似for i in {2..10}; do cp test1.eml test$i.eml; done

但或多或少相同的事情。

tee >test2.eml test{3..10}.eml < test1.xml

只會讀取一次原始碼並只執行一個命令。對於大文件,它可能效率不高,並且可能會鼓勵碎片化,因為tee會依次在每個輸出文件中寫入數據塊。它還會根據您目前的 umask 創建具有權限的文件,而不是像cp根據選項那樣部分或完全複製原始權限。

如果您想節省打字,只需zsh用作您的外殼(順便說一句,這就是這些{2..10}構造的來源)

for f (test{2..10}.eml)cp test1.eml $f

與您的一樣短:

eval 'cp test1.eml 'test{2..10}.eml';'

更直覺/更易讀,更容易推廣到具有更多問題字元的文件名。

zsh假設您沒有禁用該選項multios,您還可以執行以下操作:

<test1.eml >test{2..10}.eml

在那裡,zshtee內部進行並呼叫cat. 因此,它的效率略低於該tee方法。

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