Elimine todos los archivos con nombres que comiencen con comillas simples

Elimine todos los archivos con nombres que comiencen con comillas simples

Necesito eliminar todos los archivos con estos nombres (las comillas son parte del nombre):

'index.html?some-query-string'

Probé con:

rm \'index.html?*\'

Recibo este error:

rm: cannot remove ''\''index.html?*'\''': No such file or directory

Respuesta1

Análisis

las comillas son parte del nombre

¿Está seguro? ¿Cómo lo sabes? hay esto"característica" del GNU modernols, por lo que imprime nombres con comillas adicionales, donde hay caracteres como ?dentro; entonces, cuando un profano copia, pega 'index.html?some-query-string'y ejecuta, por ejemplo rm 'index.html?some-query-string', este será el comando seguro correcto.

Desafortunadamente, esto puede confundir a los usuarios más expertos que saben que deben citar o escapar de algunos caracteres. Su rmcomando ( rm \'index.html?*\') está bien para el nombre entre comillas. Puede coincidir con más nombres de archivos debido a que ?*es un patrón global; Supongo que esto es lo que quieres, ya que escribiste "Necesito eliminar todos los archivos". El hecho de que el comando te haya dado No such file or directoryme hace creer que los nombres existentes son realmente diferentes.

Para confirmar esto, ejecute ls -N. Si este comando tiene éxito e imprime nombres comoindex.html?some-query-string sin comillasentoncesestosson los nombres reales.


Solución

Esta parte de la respuesta supone que usted lses GNU moderno lso similarmente "inteligente", por lo que las comillas en cuestión no pertenecen al nombre del archivo.

Para eliminar un archivo en particular, actúe como un profano total que ve 'index.html?some-query-string'el resultado de "smart" lso como un usuario consciente de la necesidad de citar (creo que lo es) que ve index.html?some-query-stringel resultado de ls -N. Correr:

rm 'index.html?some-query-string'

O si desea eliminar todos los archivos con nombres que comiencen con index.html?:

rm 'index.html?'*

El shell eliminará las comillas, no llegarán a rm. Las comillas simples ?no se tratarán como comodines, se pasarán rmliteralmente. El elemento sin comillas *se tratará como un comodín, coincidirá con cualquier cadena de consulta y el shell pasará posiblemente varios nombres de archivos coincidentes como argumentos a rm.

Respuesta2

Si 'es parte del nombre de sus archivos, recomendaré usar el comando buscar junto con " "para pasar el patrón de nombre para su comando.

Un ejemplo que puedes utilizar es:

find . -maxdepth 1 -type f -name "'index.html?*'" -exec rm {} \;

información relacionada