Encontrar todos los files .cpp y .h y moverlos a ~ / junk

Creé una carpeta en mi carpeta de inicio llamada basura, y digamos que quiero mover todos los files .cpp y .h a ella. ¿Cómo lo haría? Mi primer pensamiento es comenzar con find ~ -name * .cpp -print, pero no sé cómo poner varios patrones en el argumento find, y estoy bastante perdido después de eso.

portably:

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

Más arriba excluyendo la carpeta de junk de la búsqueda.

Solo estamos eliminando files regulares ( -type f ). Puede haber otros types de files que desee mover como enlaces simbólicos, pero tenga en count que los enlaces simbólicos mobilees a menudo los rompen.

El -i es una salvaguarda para evitar que dos files con el mismo nombre se anulen entre sí.

Si está en un sistema GNU, puede usar la opción -regex para find como se muestra a continuación:

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

la salida mostrará qué command se ejecutará, como una ejecución en seco. Si se ve bien, puede eliminar el echo para aplicar.

Comando descomponer

  • -regex : el nombre de file coincide con el patrón de expresión regular, el tipo de expresión regular pnetworkingeterminado usa emacs
  • ".*\.\(h\|cpp\)" : Dado que usa emacs tipo regex por defecto, según la coincidencia de patrón . (punto) significa que coincide con cualquier carácter para que coincida exactamente . (punto), tenemos que usar el carácter de escape que es \ . significa un carácter especial como ( , | tenemos que usar el carácter de escape. el patrón es el mismo que .*.(h|cpp) (regextype posix-egrep)
  • -exec : command de ejecución
  • { } : La cadena {} reemplazada por el nombre del file de coincidencias
  • \; : Necesita estar allí ya que indica el final de los arguments proporcionados a la variable -exec

Para get más información sobre la expresión regular, puede consultar

  • man 7 regex
  • Tutorial Regex