Если ваша цель - выполнить однострочную команду, которая:
- Удаляет и воссоздает каталог,
~/Desktop/fooесли он уже существует.
- Просто создает каталог,
~/Desktop/fooесли он еще не существует.
Тогда вы можете использовать:
rm -r ~/Desktop/foo; mkdir ~/Desktop/foo
; эквивалентно новой строке, но позволяет выполнять несколько команд в одной строке (т. е. как «одна команда»).
- Если удаляемый каталог может содержать файлы только для чтения, вам понадобится
-fфлаг, чтобы удалить их без интерактивного запроса пользователя. Это нормально, но я рекомендую быть особенно осторожным rm -rf .... Смотрите man rmподробности.
- Вам нужна
rmкоманда , чтобы закончить перед mkdirвыполнением команды; это причина, чтобы использовать ;вместо &. (Предыдущая команда &выполняется в фоновом режиме асинхронно.)
- Вам нужно
mkdirвыполнить rmкоманду, когда команда будет выполнена успешно; это причина, чтобы использовать ;вместо ||.
- Вам нужно, чтобы
mkdirкоманда запускалась при rmсбое (обычно сбой будет означать, что каталог еще не существует); это причина, чтобы использовать ;вместо &&.
- Команда
rmможет завершиться ошибкой, даже если каталог уже существует, и в этом случае mkdirкоманда также не будет выполнена, но сообщения об ошибках будут иметь смысл, и, вероятно, нет необходимости добавлять промежуточный шаг, проверяющий fooсуществование, прежде чем пытаться его создать.
См 3.2.3 Списки команд в Bash Reference Manual для получения дополнительной информации и разъяснений о ;, &, ||и &&операторов.
Как и предполагал Муру (и разработал Ринзвинд ), я рекомендую вам посмотреть,rsync будет ли оно соответствовать вашим потребностям в резервном копировании. На странице документации по rsync есть несколько дополнительных полезных руководств , а также это руководство по Ubuntu rsync .
почему у mkdir нет этой опции?
mkdirсоздает каталоги («mk» означает «make» ). Для него также рекурсивно удалять каталоги и все файлы в них было бы плохо, потому что это нарушило бы принцип наименьшего удивления таким образом, что могло бы привести к потере данных.
rmdirдаже не удаляет каталоги, в которых есть (не каталоги) файлы. rmимеет -rопцию, которая имеет смысл, так rmкак ожидается, что файлы будут удалены (это ее цель, поэтому внутренняя опасность интуитивно понятна, и пользователи обычно знают, что нужно соблюдать осторожность при выполнении rmкоманд).
fooкак удалить все содержимое этого?mkdirимеет-pпараметр, который игнорирует, если каталог существует.