howto copy folder & ldquo; & rdquo; в другую папку с увеличенным номером test1, test2 test3

Когда создается пакет, его автор предоставляет ему список предлагаемых пакетов, это то, что вам не нужно, но может потребоваться.

Когда вы устанавливаете пакет, он будет автоматически загружайте этот пакет, а также любые другие пакеты, на которые, как говорят, зависит. «Новые» пакеты представляют собой комбинацию пакетов, которые вы явно сказали ему для установки, и любые зависимые пакеты, которые ему нужны, чтобы они работали. «Экстра» - это те, которые ему нужны, но вы не указали.

0
задан 18 February 2018 в 14:49

3 ответа

Предполагая, что у вас есть папка с именем test, напишите сценарий оболочки copytest со следующим содержимым:

#!/bin/bash

i=1
while true
do
    if [ -d test$i ]
    then
        i=$((i+1))
    else
        cp -r test test$i
        break
    fi
    if [ $i -eq 11 ]
    then
        rm -r test{1..10}
        cp -r test test1
        break
    fi
done

Теперь сделайте его исполняемым с помощью chmod u+x copytest, и каждый раз, когда вы вызываете ./copytest, вы

Объяснение:

[ -d test$i ] проверяет, есть ли уже тест на папку $ i break, выходит из бесконечного цикла, инициированного по while true. Одиннадцатый вызов удалит все копии и начнется снова с test1.

Выполняет то, что вы просили в своем вопросе (создайте все больше экземпляров теста). Если вы хотите, чтобы копии «переходили» при каждом вызове (т. Е. Тест10 отбрасывается, test9 становится test10 и т. Д.), Тогда вы должны взглянуть на команду logrotate, как было предложено @ Jean-Marie в первом комментарии.

1
ответ дан 22 May 2018 в 13:02
  • 1
    Это именно то, что я искал, также понимая синтаксис в скрипте, могу ли я поблагодарить вас за ваш ответ! Также спасибо за то, что другие задумались. Мне очень нравится это сообщество. – Björn 18 February 2018 в 19:44
  • 2
    @ Björn Если это именно то, что вы просили, вы можете отметить это как принятый ответ. Я добавил один разрыв, когда i = 11. – muclux 18 February 2018 в 19:55
  • 3
    Хорошо спасибо за то, что указали мне на это. Я несколько раз запускал сценарий. Я приспособил его к моим потребностям, но что-то странное происходит. После 11-й копии папки. Я получаю сообщение об ошибке после 10-й копии, и есть папки, созданные за 11. «Код» #! / Bin / bash i = 1, а true, если [-d map / test $ i] то i = $ ((i + 1)) else cp -r test map / test $ i break fi if [$ i -eq 11], тогда rm -r map / test {1..10} cp -r map / test test1 fi 'done' – Björn 18 February 2018 в 20:00
  • 4
    Вот почему я добавил отсутствующий break, когда значение 11 достигнуто в цикле. См. Мой исправленный ответ выше. – muclux 18 February 2018 в 20:02
  • 5
    ahh ok, теперь я вижу, теперь он работает. благодаря! – Björn 18 February 2018 в 20:08

Предполагая, что у вас есть папка с именем test, напишите сценарий оболочки copytest со следующим содержимым:

#!/bin/bash i=1 while true do if [ -d test$i ] then i=$((i+1)) else cp -r test test$i break fi if [ $i -eq 11 ] then rm -r test{1..10} cp -r test test1 break fi done

Теперь сделайте его исполняемым с помощью chmod u+x copytest, и каждый раз, когда вы вызываете ./copytest, вы

Объяснение:

[ -d test$i ] проверяет, есть ли уже тест на папку $ i break, выходит из бесконечного цикла, инициированного по while true. Одиннадцатый вызов удалит все копии и начнется снова с test1.

Выполняет то, что вы просили в своем вопросе (создайте все больше экземпляров теста). Если вы хотите, чтобы копии «переходили» при каждом вызове (т. Е. Тест10 отбрасывается, test9 становится test10 и т. Д.), Тогда вы должны взглянуть на команду logrotate, как было предложено @ Jean-Marie в первом комментарии.

1
ответ дан 17 July 2018 в 20:35

Предполагая, что у вас есть папка с именем test, напишите сценарий оболочки copytest со следующим содержимым:

#!/bin/bash i=1 while true do if [ -d test$i ] then i=$((i+1)) else cp -r test test$i break fi if [ $i -eq 11 ] then rm -r test{1..10} cp -r test test1 break fi done

Теперь сделайте его исполняемым с помощью chmod u+x copytest, и каждый раз, когда вы вызываете ./copytest, вы

Объяснение:

[ -d test$i ] проверяет, есть ли уже тест на папку $ i break, выходит из бесконечного цикла, инициированного по while true. Одиннадцатый вызов удалит все копии и начнется снова с test1.

Выполняет то, что вы просили в своем вопросе (создайте все больше экземпляров теста). Если вы хотите, чтобы копии «переходили» при каждом вызове (т. Е. Тест10 отбрасывается, test9 становится test10 и т. Д.), Тогда вы должны взглянуть на команду logrotate, как было предложено @ Jean-Marie в первом комментарии.

1
ответ дан 23 July 2018 в 21:12

Другие вопросы по тегам:

Похожие вопросы: