Me gustaría ejecutar una línea de comando:
cd ~/www/tmp/; rm -P 2*
Pero recibo un error si no hay archivos que comiencen con 2.
-f
Sin embargo, usted pensaría que me gustaría usar :
-f Attempt to remove the files without prompting for confirmation, regardless of the file's permissions. If the file does not exist, do not display a diagnostic message or modify the exit status to reflect an error.
Y yo hago la atención sobre el archivo permissions- si hay algo raro pasa, yo preferiría la orden de interrupción. Solo quiero suprimir los errores 'no existe'.
He examinado algunas otras preguntas con 'errores rm', y he encontrado estas dos que parecen (algo) relevantes:
Eliminar archivos y directorios por sus nombres. El fichero o directorio no existe
Pero, no entiendo todo lo que sucede en las respuestas a esta pregunta, y no sé si lo necesito.
El touch
truco sugerido en esta pregunta:
¿Rm no informa cuando falta un archivo?
Parece viable, ya que no creo que me importe el golpe de rendimiento (pero ¿qué tipo de golpe de rendimiento tomarías? Es decir, ¿es esta una técnica razonablemente escalable o solo estoy aprendiendo hábitos muy malos?)
No estoy seguro de cómo haría un if-then
dentro de la línea de comando.
¿Hay alguna otra opción para una simple limpieza de línea de comando cortar-pegar?
¿ find -delete
Funcionaría mejor para mi caso? Si es así, ¿por qué?
error en cuestión:
rm: 2*: No such file or directory
fuente
rm
, así que tendrá que decir qué es eso.zsh
como su shell interactivo? ¿Estás recibiendo unNo matches found
error?2*
a rm en lugar de expandirla a una lista de archivos. Mire el error en cuestión: dice que rm se queja, no sh / bas / zsh / ...Respuestas:
Sólo para llamar
rm -P
por existente archivos regulares cuyos nombres coinciden con un patrón en un directorio (pero no por debajo):P.ej,
Para hacer coincidir solo los no directorios, use
! -type d
en lugar de-type f
. La diferencia es que! -type d
sería cierto para una gama más amplia de tipos de archivos (enlaces simbólicos, canalizaciones con nombre, sockets, etc.)Puesto que desea que se le pregunte para algunas condiciones sobre los archivos encontrados, se debe no utilizar
-delete
en lugar de-exec rm
desde que funciona comorm -f
.Eliminar
-maxdepth 1
para dejarfind
mirar en subdirectorios de forma recursiva.fuente
! -type d
podría estar más cercarm 2*
, creo.find ~/www/tmp/ -maxdepth 1 -type f -name '2*' -exec rm -P {} +
-P
.-type f
, pero no sabía cómorm
actuar así, así que la sugerencia de @ Kusalanada fue acertada, y la diferenciación / explicación es excelente para aprender.rm 2*(.)
en zsh).