Shell

在命令 shell 中重複文件 x 次

  • July 14, 2021

我嘗試使用 for 循環從命令行複制影片文件 x 次,我已經嘗試過這樣,但它不起作用:

for i in {1..100}; do cp test.ogg echo "test$1.ogg"; done

您的 shell 程式碼有兩個問題:

  1. echo不應該在那裡。
  2. 變數$i(“dollar i” $1) 在目標文件名中被錯誤輸入為 (“dollar one”)。

要在與文件本身相同的目錄中復製文件,請使用

cp thefile thecopy

如果您使用兩個以上的參數,例如

cp thefile theotherthing thecopy

然後假設您想複製thefiletheotherthing進入名為thecopy.

在您的情況下cp test.ogg echo "test$1.ogg",它專門尋找一個名為test.ogg和一個名為echo複製到目錄的文件test$1.ogg

很可能會$1擴展為空字元串。這就是為什麼當你echo從命令中刪除時,你會得到“test.ogg 和 test.ogg 是同一個文件”;正在執行的命令本質上是

cp test.ogg test.ogg

這可能是一個錯誤的輸入。

最後,你想要這樣的東西:

for i in {1..100}; do cp test.ogg "test$i.ogg"; done

或者,作為替代

i=0
while (( i++ < 100 )); do
 cp test.ogg "test$i.ogg"
done

或者,使用tee

tee test{1..100}.ogg <test.ogg >/dev/null

注意:這很可能適用於 100 個副本,但對於數千個副本,它可能會生成“參數列表太長”錯誤。在這種情況下,請恢復使用循環。

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