O comando find
tem um comutador para isso. É chamado -exec
.
$ find . -name '*.dcm' -exec dcmdjpeg {} {} \;
Isso substituirá nomes de arquivos encontrados por find
nos locais em que houver {}
. Então, acima, faremos isso para cada nome de arquivo.
dcmdjpeg file1.dcm file1.dcm
dcmdjpeg file2.dcm file2.dcm
...
Se houver espaços em seus nomes de arquivos, você poderá usar este método:
$ find . -name '*.dcm' -exec dcmdjpeg "{}" "{}" \;
Vendo o que está acontecendo
Você pode trocar o comando dcmdjpeg
com o comando echo
e executar o acima para ver os nomes dos arquivos que serão executados.
Digamos que eu tenha esses dados de amostra.
$ 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
E agora, quando executamos o segundo exemplo que lida com espaços em nomes de arquivos:
$ 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
Acima, você pode ver nomes de arquivos sendo exibidos duas vezes por arquivo encontrado.