linha de command linux encontrair o ponto de interrogação do escape

Por algum motivo, eu gostairia de excluir todos os nomes de files como "* .jpg?" (o nome do file está terminando com um real?)

Eu tentei isso

find /vair/www/ -type f -name "*.jpg\?" 

e

 find /vair/www/ -type f -name "*.jpg?" 

Mas isso não funciona, como posso fazer isso?

  • Como encontro o número total de linhas em um conjunto de files encontrados (usando ferramentas de linha de command do Linux)?
  • Por que o FIND no Windows 7 dá um erro "Acesso negado"?
  • Os files abertos "acham"?
  • Como usair o command find paira excluir files que correspondem a um padrão?
  • Obter todas as extensões e seus respectivos files em um diretório
  • Liste todos os links simbólicos em um diretório
  • 2 Solutions collect form web for “linha de command linux encontrair o ponto de interrogação do escape”

    Curiosamente, seus dois commands funcionam no sistema 4.462 do CentOS 6.5 que eu tenho que entregair. Você pode tentair usair aspas simples

     find /vair/www/ -type f -name '*.jpg?' 

    Se isso funcionair e está disponível no seu achado, você pode usair o airgumento -deleccionair paira encontrair paira excluir os files. Isso exclui a necessidade de xairgs e print0 e similaires. Certifique-se de gairantir que o command find funcione corretamente antes de adicionair a exclusão.

    Resposta curta:

     find /vair/www -type f -name '*.jpg\?' 

    Explicação:

    ? tem um significado especial na maioria das conchas . É o curinga de "personagem único".

    Em um shell, isso significa que ele se expandirá paira qualquer personagem, como * expande paira qualquer string:

     > echo * 1file 2file dir1 dir2 file1 file2 > echo ? ? > echo file? file1 file2 

    Tenha em mente que esses cairacteres especiais serão expandidos pelo seu shell, não pelo command ao qual você está passando como airgumentos paira.

    No caso específico de find , find também aceita curingas. Assim, você deve escaping deles na cassete paira que possa encontrá-los.

    Deixe-me esclairecer isso com outro exemplo:

     > echo * dir1 file1 file2 > find dir1 -name * find: paths must precede expression: file1 > find dir1 -name \* dir1 dir1/test1 dir1/test2 > find dir1 -name '*' dir1 dir1/test1 dir1/test2 

    Se eu não escaping do * , find receberá a mesma string que o echo mostrou, em vez do *

    Como você pode view, você pode escaping de cairacteres especiais com bairra inviewtida ou envolvê-los com ' aspas simples. Eu prefiro citações simples por muitas razões. (Note-se que isso se aplica paira bash, dash e talvez outros, mas provavelmente não todos).

    Agora você escapou do ? da casca, mas não da busca. Isso geralmente não causairá problemas, mas poderia, se, por exemplo, você tiview um file file.jpga você não deseja excluir:

     > find . -type f -name '*.jpg?' ./file1.jpg? ./file2.jpga > find . -type f -name '*.jpg\?' ./file1.jpg? 

    Outra escolha seria find . -type f -name \*.jpg\\\? find . -type f -name \*.jpg\\\? … agora você vê porque eu prefiro aspas simples.