
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 rm
comando ( 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 directory
me 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 ls
es GNU moderno ls
o 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" ls
o como un usuario consciente de la necesidad de citar (creo que lo es) que ve index.html?some-query-string
el 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 rm
literalmente. 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 {} \;