Localizando todos os arquivos .cpp e .h e movendo-os para ~ / junk

0

Eu criei uma pasta no meu lixo de chamada do diretório inicial e digamos que eu queira mover todos os arquivos .cpp e .h para ela. Como eu faria isso? Meu primeiro pensamento é começar com find -nome * .cpp -print, mas não sei como colocar vários padrões no argumento find, e estou bastante perdido depois disso.

    
por Jonathan Chiou 08.02.2014 / 12:16

2 respostas

2

portably:

cd &&
  find . -path ./junk -prune -o -type f \( \
    -name '*.h' -o -name '*.cpp' \) -exec sh -c '
      exec mv -i "$@" junk' sh {} +

Acima de excluir a própria pasta junk da pesquisa.

Estamos removendo apenas arquivos regulares ( -type f ). Pode haver outros tipos de arquivos que você deseja mover como links simbólicos, mas cuidado com o fato de que mover links simbólicos frequentemente os quebra.

O -i é uma proteção para evitar que dois arquivos com o mesmo nome se sobreponham mutuamente.

    
por 08.02.2014 / 12:30
2

Se em um sistema GNU, você pode usar a opção -regex para find como mostrado abaixo:

find . -regex ".*\.\(h\|cpp\)" -exec echo mv -v "{}" ~/junk \;

a saída mostrará qual comando seria executado, como uma execução a seco. Se isso parece bom, você pode remover o echo para aplicar.

Quebra de Comando

  • -regex : o nome do arquivo corresponde ao padrão de expressão regular, o tipo de expressão padrão é usado emacs
  • ".*\.\(h\|cpp\)" : Como usa o tipo de regex padrão emacs , como por correspondência de padrão . (ponto) significa que qualquer caractere corresponde exatamente a . (ponto), temos que usar o caractere de escape que é \ . significa para caracteres especiais como ( , | , temos que usar o caractere de escape. o padrão é igual a .*.(h|cpp) (regextype posix-egrep)
  • -exec : comando de execução
  • { } : a string {} substituída pelo nome do arquivo de correspondências
  • \; : Precisa estar lá, pois indica o fim dos argumentos fornecidos para a variável -exec

Para mais informações sobre expressões regulares, você pode consultar

por 08.02.2014 / 12:27

Tags