Command-Line
使用命令行製作單個文件的多個副本的替代解決方案?
我正在嘗試將文件複製到 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
在那裡,
zsh
在tee
內部進行並呼叫cat
. 因此,它的效率略低於該tee
方法。