Удалить старый каталог, создать новый пустой каталог
Одиночная команда bash >| foo
создает пустой файл foo
независимо от того, был ли он ранее непустым, пустым или отсутствующим. (Сбой, если он был только для чтения или каталог.)
Есть ли аналогичная команда для создания пустой директории? Это должно работать, если каталог был там раньше или нет, пустой или нет. Примерно так же, как rm -rf fooDir; mkdir -p fooDir
но не нарушая, не повторяйся. (Допустимо потерпеть неудачу, если каталоги или файлы доступны только для чтения.)
Контекст представляет собой сценарий, который создает каталог для хранения своих выходных данных, но стирает выходные данные любого предыдущего запуска.
2 ответа
Я считаю, что ответ: нет. Там нет единой команды для того, что вы просите, по крайней мере, по этим двум ссылкам:
- https://askubuntu.com/questions/517329/overwrite-an-existing-directory
- https://stackoverflow.com/questions/23698183/how-to-force-cp-to-overwrite-directory-instead-of-creating-another-one-inside
Все, что я могу сказать, это просто использовать две отдельные команды. Это может быть некрасиво и "неудобно", но, скорее всего, это единственный способ сделать это на 99%.
Сначала найдите пустой каталог. Универсального способа сделать это не существует, но вы можете либо сделать один, либо найти вероятного кандидата с find /var -type d -empty | xargs ls -ltd
, Например, на Ubuntu 14, /var/lib/ntpdate
был пустым в течение многих лет. Еще одна безопасная ставка /etc/ppp/resolv
,
Тогда единственная команда rsync -a --delete /var/lib/ntpdate/ fooDir
, Конечный слэш имеет значение. К сожалению, без универсального /dev/nullDir
Это решение может сбить с толку новичка. Так что если ваш скрипт должен делать это много раз, стоит сначала создать /tmp/emptyDir
и затем используйте это с rsync.