cómo copiar todos los archivos que coincidan con el patrón en un nuevo árbol de carpetas que coincida con la misma estructura

cómo copiar todos los archivos que coincidan con el patrón en un nuevo árbol de carpetas que coincida con la misma estructura

Tengo una carpeta Todo con

AllFolders
    F1
        some_file_20170315_xyz.txt
        some_file_20170314_xyz.txt
        ....
    F2
        some_other_file_20170315_abc.txt
        some_other_file_20170314_abc.txt
        ...
    ...
    Fn 

¿Cómo puedo copiar todos los archivos que coinciden con una fecha determinada en una carpeta vacía diferente para que la estructura de la carpeta también se copie y se vea así?

Folder_20170315
    F1
        some_file_20170315_xyz.txt
    F2
        some_other_file_20170315_abc.txt

Respuesta1

Una forma es utilizar findy cp:

find . -iname '*20170315*' -exec cp --parents {} /tmp/Folder_20170315 \;

La carpeta de destino ya debe existir. Si lo deseas, también puedes crear un script para su creación.

Parece que deseas verificar el nombre del archivo, pero findtambién puedes usarlo para verificar la fecha del archivo.

Respuesta2

Como cp --parentsno está disponible en Mac, utilicé dos comandos para resolver un problema similar:

find . -name '*.example' | xargs -I FOO dirname FOO | xargs -I FOO mkdir -p /new/root/directory/FOO
find . -name '*.example' | xargs -I FOO cp FOO /new/root/directory/FOO

El primer comando crea el árbol de directorios. El segundo copia los archivos.

Esto supone que findes rápido. Si findse trata de un cuello de botella en el rendimiento, querrá optimizarlo aún más. Por ejemplo, podrías mover las operaciones a una función.

información relacionada