
O comando bash único >| foo
cria um arquivo vazio foo
, não importa se ele não estava vazio, vazio ou ausente. (Falha se for somente leitura ou um diretório.)
Existe um comando único semelhante para criar um diretório vazio? Deveria funcionar se o diretório estivesse lá antesou não, vazioou não. Aproximadamente o mesmo, rm -rf fooDir; mkdir -p fooDir
mas sem violar Não se repita. (É aceitável falhar se os diretórios ou arquivos forem somente leitura.)
O contexto é um script que cria um diretório para armazenar sua saída, mas apaga as saídas de qualquer execução anterior.
Responder1
Eu acredito que a resposta é não. Não existe um comando único para o que você está pedindo,pelo menosde acordo com estes dois links:
- https://askubuntu.com/questions/517329/overwrite-an-existente-diretório
- https://stackoverflow.com/questions/23698183/how-to-force-cp-to-overwrite-directory-instead-of-creating-another-one-inside
Tudo o que posso dizer é apenas usar os dois comandos separados. Pode ser feio e “inconveniente”, mas é 99% provável que seja a única maneira de fazer isso.
Responder2
Primeiro, encontre um diretório vazio. Não háuniversalmaneira de fazer isso, mas você pode criar uma ou encontrar um candidato provável com find /var -type d -empty | xargs ls -ltd
. Por exemplo, no Ubuntu 14, /var/lib/ntpdate
está vazio há anos. Outra aposta segura é /etc/ppp/resolv
.
Então o único comando é rsync -a --delete /var/lib/ntpdate/ fooDir
. A barra final é importante. Infelizmente, sem uma solução universal /dev/nullDir
, esta solução provavelmente confundirá o recém-chegado. Portanto, se o seu script tiver que fazer isso muitas vezes, vale a pena primeiro criá-lo /tmp/emptyDir
e depois usá-lo com o rsync.