Hay muchas situaciones en las que el uso de a *
es prácticamente inevitable, por ejemplo, rm -rf *
en una carpeta que contiene miles de subcarpetas y archivos.
Pero, ¿qué sucede si desea excluir solo uno o dos archivos o carpetas del rm
comando? Busqué en Google y solo encontré soluciones bastante complicadas, find . -depth -not \( -name 'one' -o -name 'two' \
-o -name 'three' \) -exec rm {} \;
como se indica aquí .
¿Existe la posibilidad de hacer esto de una manera más fácil, sin ese desvío find
? Por ejemplo, rm -rf --exclude='one' --exclude='two' --exclude='three' *
como en rsync o simplemente rm -rf -e 'one','two','three' *
?
Tal vez incluso una posibilidad general de excluir cosas de *
(por lo demás comandos como cp
, mv
, ... no tienen que poner en práctica su propia)? ¿Algo así *{'one','two','three'}
o algo así?
mv -t /tmp one two three && rm -rf * && mv -t . /tmp/one /tmp/two /tmp/three
, pero preferiría una solución que ofrezca la posibilidad de excluir explícitamente algo de *
. Seguramente habrá situaciones en las que mover o copiar los archivos a otro destino no será una opción.
find
con la--delete
opción (no es necesario ejecutarrm
para cada archivo. Esa es una sobrecarga innecesaria).