Intereting Posts
Что такое «легкий вес»? Сделать systemd прекратить запуск нежелательной службы wpa_supplicant? Как найти идентификатор процесса команды, запущенной в другом терминале? Освоение apt-get используйте другой сокет, чем / dev / log, общесистемный Cron ежечасно работает в нечетные часы «yum» не распознается как внутренняя или внешняя команда, операционная программа или командный файл sshfs mount, sudo получает разрешение отказано Не окрашены цвета рыси У пользователя все еще есть привилегии sudo, несмотря на то, что они удалены из всех групп Почему отказ от пароля намного медленнее, чем принятие его? Установили 2 библиотеки друг к другу и нуждались в обоим. Какое решение избежать проблем с связыванием? Моно 4.4.0.40 на CentOS 6.7 x64 не удается с помощью SigAbrt Восстановить из ярлыка корзины? Проблемы с правилами udev для запуска сценария bash при отключении жесткого диска

Как я могу запустить сценарий рекурсивно в каталоге

Я использую следующий код для декодирования сжатых JPEG DICOM.

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

Я запускаю этот код внутри любой папки, содержащей эти файлы.

Проблема в том, что у меня есть родительская папка и список подпапок внутри этой родительской папки. Каждая подпапка содержит не менее 2000 DICOM (Файл). Как я могу применить этот код один раз внутри родительской папки, который будет выполняться во всех подпапках одновременно?

Команда find имеет для этого переключатель. Он называется -exec .

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

Это заменит имена файлов, как они найдены, find в местах, где есть {} . Итак, в приведенном выше примере мы будем делать это для каждого имени файла.

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

Если в ваших именах есть пробелы, вы можете использовать этот метод:

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

Видя, что происходит

Вы можете поменять команду dcmdjpeg на команду echo и запустить выше, чтобы увидеть имена файлов, которые будут выполнены.

пример

Скажем, у меня были данные этого образца.

 $ 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 

И теперь, когда мы запускаем второй пример, который обрабатывает пробелы в именах файлов:

 $ 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 

В приведенном выше примере вы можете видеть, что имена файлов повторяются дважды в каждом найденном файле.