¿Cómo encuentro un montón de archivos con una cadena en su nombre de archivo (o texto del cuerpo) y luego muevo todos esos archivos a una carpeta específica?

¿Cómo encuentro un montón de archivos con una cadena en su nombre de archivo (o texto del cuerpo) y luego muevo todos esos archivos a una carpeta específica?

Digamos: ¿qué pasaría si quisiera mover todos los archivos HTML en varios directorios independientes con la palabra "heavengames" en su nombre de archivo (y como segunda pregunta, todos los archivos HTML con la palabra "heavengames" en su cuerpo de texto) a un nuevo directorio llamado ¿"hilos de juegos del cielo"?

Respuesta1

Para mover archivos con la palabra en su nombre:

find /path/to/dir1 /path/to/dir2 /and/so/on -type f -iname "*heavengames*" \
-exec mv -t /path/to/heavengames-threads {} \+

Para mover archivos con Word en su cuerpo:

find /path/to/dir1 /path/to/dir2 /and/so/on -type f -exec grep -q heavengames {} \; \
-exec mv -t /path/to/heavengames-threads {} \+

PD. Para comprobar que todo está correcto, agregue echoantes mven la primera ejecución.

Respuesta2

En zsh o bash ≥4, según el nombre del archivo:

mkdir heavengames-threads
mv **/*heavengames*.html heavengames-threads/

Para obtener más flexibilidad (por ejemplo, para recrear la jerarquía de directorios, busquezmv(haymuchos ejemplos en este sitio).

Úselo greppara buscar el contenido del archivo. Con versiones recientes de utilidades GNU (es decir, en Linux o Cygwin no integrado):

grep -RZ heavengames . | xargs -0 mv -t heavengames-threads/

Para comandos más portátiles, utilice find. Verla respuesta de prisa.

información relacionada