Якщо ваша мета - виконати однорядну команду, яка:
- Вилучає та відтворює каталог,
~/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
опцію, яка ігнорує, чи існує каталог.