¿Cómo puedo ejecutar un script de forma recursiva en un directorio?

¿Cómo puedo ejecutar un script de forma recursiva en un directorio?

Estoy usando el siguiente código para decodificar DICOM comprimidos en JPEG.

find ./* -maxdepth 0 -name '*.dcm' -printf 'dcmdjpeg %p %p \n' | sh

Ejecuto este código dentro de cualquier carpeta que contenga esos archivos.

El problema es que tengo una carpeta principal y una lista de subcarpetas dentro de esta carpeta principal. Cada subcarpeta contiene al menos 2000 DICOM (archivo). ¿Cómo puedo aplicar este código una vez dentro de la carpeta principal para ejecutarlo en todas las subcarpetas al mismo tiempo?

Respuesta1

El findcomando tiene un interruptor para eso. Se llama -exec.

$ find . -name '*.dcm' -exec dcmdjpeg {} {} \;

Esto sustituirá los nombres de archivos a medida que se encuentren finden los lugares donde se encuentran {}. Entonces, en lo anterior haremos esto para cada nombre de archivo.

dcmdjpeg file1.dcm file1.dcm
dcmdjpeg file2.dcm file2.dcm
...

Si hay espacios en los nombres de sus archivos, puede utilizar este método:

$ find . -name '*.dcm' -exec dcmdjpeg "{}" "{}" \;

viendo lo que esta pasando

Puede intercambiar el comando dcmdjpegcon el comando echoy ejecutar lo anterior para ver los nombres de archivos que se ejecutarán.

Ejemplo

Digamos que tenía estos datos de muestra.

$ tree
.
|-- 1
|   |-- 1.dcm
|   |-- 1\ space.dcm
|   |-- 2.dcm
|   `-- 3.dcm
|-- 1.dcm
|-- 2
|   |-- 1.dcm
|   |-- 1\ space.dcm
|   |-- 2.dcm
|   `-- 3.dcm
|-- 2.dcm
|-- 3
|   |-- 1.dcm
|   |-- 1\ space.dcm
|   |-- 2.dcm
|   `-- 3.dcm
`-- 3.dcm

Y ahora, cuando ejecutamos el segundo ejemplo que maneja espacios en nombres de archivos:

$ find . -name '*.dcm' -exec echo "{}" "{}" \;
./2.dcm ./2.dcm
./1/2.dcm ./1/2.dcm
./1/3.dcm ./1/3.dcm
./1/1 space.dcm ./1/1 space.dcm
./1/1.dcm ./1/1.dcm
./3.dcm ./3.dcm
./1.dcm ./1.dcm
./2/2.dcm ./2/2.dcm
./2/3.dcm ./2/3.dcm
./2/1 space.dcm ./2/1 space.dcm
./2/1.dcm ./2/1.dcm
./3/2.dcm ./3/2.dcm
./3/3.dcm ./3/3.dcm
./3/1 space.dcm ./3/1 space.dcm
./3/1.dcm ./3/1.dcm

En lo anterior, puede ver que los nombres de archivos se repiten dos veces por archivo encontrado.

información relacionada