У меня есть имя каталога, foo
расположенного в ~/Desktop
. Предположим, я хочу создать каталог из терминала с тем же именем и в том же месте. Когда я пытался mkdir
это выдало ошибку:
mkdir: cannot create directory `/home/nux/Desktop/foo': File exists
Это имеет смысл, но я хочу заменить, foo
если существует. Я просмотрел, man mkdir
но нет никакой возможности сделать это.
Так как же перезаписать foo
каталог?
Почему нет mkdir
возможности сделать это?
foo
как удалить все содержимое этого?mkdir
имеет-p
параметр, который игнорирует, если каталог существует.Ответы:
Если ваша цель - выполнить однострочную команду, которая:
~/Desktop/foo
если он уже существует.~/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
создает каталоги («mk» означает «make» ). Для него также рекурсивно удалять каталоги и все файлы в них было бы плохо, потому что это нарушило бы принцип наименьшего удивления таким образом, что могло бы привести к потере данных.rmdir
даже не удаляет каталоги, в которых есть (не каталоги) файлы.rm
имеет-r
опцию, которая имеет смысл, такrm
как ожидается, что файлы будут удалены (это ее цель, поэтому внутренняя опасность интуитивно понятна, и пользователи обычно знают, что нужно соблюдать осторожность при выполненииrm
команд).источник
Нет, нет единой команды, чтобы делать то, что вы просите.
Почему?
В этом случае, как
mkdir
иrm
команды делать то , что вам требуется, и хорошо работают вместе, такrm -r
будет удалить каталог, так что последующееmkdir
создаст каталог.1 Искусство программирования Unix , Эрик С. Рэймонд, сам цитирует Дуга Макилроя.
источник
Команда для удаления каталога есть
rm
. Итак, вам нужно 2 команды.Как показано в комментариях, вы можете связать их цепочкой
;
(= сделать оба, даже если 1-й сбой) или&&
(= только mkdir, если не сбой rm).Это
-r
для удаления dirs. 1-я команда также удаляет ВСЕ содержимое каталога. Если это НЕ ваше намерение, то rm и mkdir - это не то, что вы ищете: разрешенияchmod
иchown
.Неоднозначность.
mkdir
значит сделать каталог. Не удаляйте и делайте каталог. А посколькуrm
команда предназначена для удаления содержимого, нет необходимостиrmdir
иметь возможность удалять каталог.источник
Чтобы сделать это самым чистым способом, я использую это:
И использовать это:
Это гарантирует, что вы пытаетесь удалить каталог, а не файл:
-d
Проверьте, существует ли каталог с таким именем. если так, удалите это.-f
Убедитесь, что файл с таким именем не существует. если это так, распечатайте сообщение об ошибке и выйдите.Создайте новый каталог и повторите эхо, или, если не удалось, эхо не удалось.
источник