¿Cómo encontrar ciertos archivos y moverlos a un nuevo directorio con el mismo comando?

¿Cómo encontrar ciertos archivos y moverlos a un nuevo directorio con el mismo comando?

Así que estuve mirando a mi alrededor y todo lo que encontré es cómo hacer esto solo si el directorio ya está creado, que es esto:

find source -name '*.z' -exec cp {} destination \;

Pero, ¿cómo puedo crear un nuevo directorio al que quiero enviar estos archivos con el mismo comando? Esto es lo que he probado pero sin éxito:

find source -name '*.z' -exec cp {} | mkdir newDirectory \;

Respuesta1

Una opción es utilizar el installcomando en lugar de cp. Tiene una opción para crear todos los directorios principales.

find source -name '*.z' -exec install -D {} dest \;

Respuesta2

no puedo canalizar datosa mkdiresa manera. Podrías hacer algo como esto:

find source -name '*.z' -exec sh -c 'mkdir -p newDirectory && cp "$@" newDirectory' _ {} +

o (asumiendo nombres de archivos que no contienen nuevas líneas)

find source -name '*.z' | while IFS= read -r foo; do 
   mkdir -p newDirectory;
   cp "$foo" newDirectory;
done 

o si solo deseas crear un directorio, para que el nombre sea siempre el mismo:

mkdir newDirectory; find source -name '*.z' -exec cp {} newDirectory \;

información relacionada