Одиночная команда bash >| foo создает пустой файл foo , независимо от того, был ли он ранее непустым, пустым или отсутствующим. (Сбой, если он был только для чтения или каталог.)

Есть ли подобная команда для создания пустой директории? Это должно работать, если каталог был там раньше или нет, пустой или нет. Примерно так же, как rm -rf fooDir; mkdir -p fooDir но не нарушая, не повторяйся . (Допустимо потерпеть неудачу, если каталоги или файлы доступны только для чтения.)

Контекст представляет собой сценарий, который создает каталог для хранения своих выходных данных, но стирает выходные данные любого предыдущего запуска.

2 ответа2

3

Я считаю, что ответ: нет. Нет единой команды для того, что вы просите, по крайней мере, по этим двум ссылкам:

Все, что я могу сказать, это просто использовать две отдельные команды. Это может быть некрасиво и "неудобно", но это единственный способ сделать это на 99%.

0

Сначала найдите пустой каталог. Универсального способа сделать это не существует, но вы можете либо сделать его, либо найти вероятного кандидата с помощью команды 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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .