Якщо ваша мета - виконати однорядну команду, яка:
- Вилучає та відтворює каталог,
~/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 для отримання додаткової інформації та роз'яснень про ;, &, ||і &&операторів.
Як запропонував Муру (і розробив Rinzwind ), я рекомендую вам заглянути,rsync щоб побачити, чи відповідає це вашим потребам резервного копіювання. На сторінці документації rsync є кілька додаткових корисних посібників , а також цей посібник з rsync Ubuntu .
чому mkdir не має такої опції?
mkdirстворює каталоги ("mk" означає "make" ). Для нього також буде рекурсивно видаляти каталоги та всі файли в них було б погано, оскільки це порушило б принцип найменшого здивування таким чином, що, ймовірно, призведе до втрати даних.
rmdirнавіть не видаляє каталоги, в яких є будь-які файли (без каталогу). rmє -rопція, яка має сенс, оскільки rmочікується видалення файлів (це її мета, тому властива небезпека інтуїтивно зрозуміла, і користувачі, як правило, знають бути обережними під час виконання rmкоманд).
fooяк видалити весь вміст із нього?mkdirмає-pопцію, яка ігнорує, чи існує каталог.