El comando ls -l
dio una lista de todos los subdirectorios en su actual directorio de trabajo actual (PWD).
El comando rm
puede eliminar varios archivos/directorios si los pasa como una lista.
por ejemplo: rm test1.txt test2.txt myApp
se eliminarán todos los tres de los archivos con los nombres de:
test1.txt
test2.txt
myApp
Además, las banderas para el comando que utilizó rm
son comunes en muchos una locura.
rm -f
- Fuerza la eliminación de archivos sin preguntar o confirmar
rm -r
- Recursividad en todos los subdirectorios y borrar todo su contenido y subdirectorios
Por lo tanto, digamos que está en/home/usuario, y la estructura de directorios parece por lo que:
/home/user
|->dir1
|->dir2
`->file1.txt
el comando ls -l
proporcionará la lista que contiene "dir1 dir2 file1.txt"
, y el resultado del comando ls -l | xargs rm -rf
se verá así:
rm -rf dir1 dir2 file1.txt
Si ampliamos su pregunta original con el ejemplo anterior, la orden final que se pasa al sistema se convierte en: rm -rf di1 dir2 file1.txt bark.*
Así, todo en el directorio actual se aniquilado, por lo que el bark.*
es redundante (de hecho le dijo a la máquina que destruyera todo en el directorio actual de todos modos).
creo que lo que quería hacer era eliminar todos los archivos en el directorio actual y todos los subdirectorios (recurse) que comienzan con bark.
Para ello, sólo hay que hacer:
find -iname bark.* | xargs rm
El comando anterior medios "busque todos los archivos en este directorio y subdirectorios, ignorando MAYÚSCULAS/minúsculas/mIxEdCaSe, que comienzan con los caracteres" ladrar "y elimínelos". Esto podría ser un mal comando si tiene un error tipográfico, por lo tanto, para estar seguro, siempre debe probar antes de realizar una eliminación de lote como esta.
En el futuro, primero haga lo siguiente para obtener una lista de todos los archivos que va a eliminar primero para confirmar que son los que desea eliminar.
find -iname bark.* | xargs echo
Entonces si está seguro, eliminarlos a través de
find -iname bark.* | xargs rm
Espero que esto ayude.
Como nota humorística, uno de los más famosos casos de "rm-rf" se puede encontrar aquí: https://github.com/MrMEEE/bumblebee-Old-and-abbandoned/commit/a047be85247755cdbe0acce6f1dafc8beb84f2ac
un script automatizado funciona algo así como rm -rf /usr/local/.........
, pero debido a la inserción accidental de un espacio, el comando se convirtió en rm -rf /usr /local/......
, por lo que esto significa "eliminar todas las carpetas de raíz que comienzan con usr o local", destruyendo efectivamente el sistema de cualquiera que lo use.Me siento mal por ese desarrollador.
Puede evitar este tipo de errores citando sus cadenas, es decir: rm -rf "/usr/ local/...."
habría proporcionado un mensaje de error y evitar este error, debido a que las cotizaciones significan que todo entre ellos es la ruta completa, no una lista de trayectorias separadas/files (es decir: le está diciendo a rm que el archivo/carpeta tiene un carácter SPACE en su nombre).
De vez en cuando me encuentro en sistemas sin 'encontrar -print0' y el emparejado' xargs -0'. Muy muy molesto Creo que Solaris puede ser uno de esos cretin lisiados. – tchrist