Como toco recursivamente os arquivos que correspondem a um padrão

8

No meu diretório ~ / docs, quero "tocar" em todos os arquivos que terminam com .txt

Como posso fazer isso?

Steve McLeod
fonte

Respostas:

20

Com find:

find ~/docs -name "*.txt" -exec touch {} \;
  • Você pesquisa em ~/docs
  • A nameopção corresponderá a todos os txtarquivos -  execexecutará o comando touchno nome do arquivo, que é substituído em{}
  • \;finaliza o comando e touchserá chamado uma vez para cada arquivo encontrado

Nota:

  • Uma pequena variação, \+no final, cria um único comando para executar touchem todos esses arquivos de uma só vez. Isso não é possível com todos os comandos, mas funciona touche economiza algumas chamadas se você tiver muitos arquivos afetados.
slhck
fonte
4
{} \+seria melhor aqui ... touchpode lidar com muitos nomes de arquivos em sua linha de comando, por exemplo, com 10 mil arquivos e {} \; 10 mil chamadas serão feitas para touch... O uso {} \+chamará touchapenas uma vez (dependendo da memória disponível) ... Aqui é um trecho de da descoberta man-page: -exec command {} + ... The command line is built in much the same way that xargs builds its command lines. Há mais detalhes na man finddocumentação.
precisa saber é o seguinte
@ Peter.O True, apenas um hábito meu de usar a outra sintaxe.
slhck
@ sllck: E muito mais lento com maior sobrecarga.
precisa