Если ваша цель - выполнить однострочную команду, которая:
- Удаляет и воссоздает каталог,
~/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
параметр, который игнорирует, если каталог существует.