Existem muitas situações em que o uso de a *
é praticamente inevitável - por exemplo, rm -rf *
em uma pasta que contém milhares de subpastas e arquivos.
Mas e se você quiser excluir apenas um ou dois arquivos ou pastas do rm
comando? Pesquisei no Google e só encontrei soluções bastante complicadas, como find . -depth -not \( -name 'one' -o -name 'two' \
-o -name 'three' \) -exec rm {} \;
as mencionadas aqui .
Existe a possibilidade de fazer isso de uma maneira mais fácil - sem esse desvio find
? Por exemplo, rm -rf --exclude='one' --exclude='two' --exclude='three' *
como no rsync ou apenas rm -rf -e 'one','two','three' *
?
Talvez até mesmo uma possibilidade geral de excluir coisas de *
(para que outros comandos como cp
, mv
... não tem que implementar a sua própria)? Algo mais *{'one','two','three'}
ou menos?
mv -t /tmp one two three && rm -rf * && mv -t . /tmp/one /tmp/two /tmp/three
, mas eu preferiria uma solução que desse a possibilidade de excluir explicitamente algo de *
. Certamente haverá situações em que mover ou copiar os arquivos para outro destino não será uma opção.
find
com a--delete
opção (não é necessário executarrm
para cada arquivo. Isso é desnecessário).