Решение, которое я нашел, включает в себя программу под названием 'detach', написанную Анноном Инглорионом и загружаемую с его веб-сайта
. После компиляции ее можно использовать в сценарии следующим образом:
$ ./detach -p debug.pid openocd # detach openocd
$ gdb # run gdb
$ kill -9 $(cat debug.pid) # end openocd process
$ rm debug.pid # remove file containing process id
Эта первая строка создает новый процесс (запускающий openocd) и сохраняет идентификатор процесса в файле (debug.pid) для последующего использования. Это предотвращает проблемы с поиском pid, как указано в ответе Оливера. При выходе из следующей блокирующей программы (gdb) файл, хранящий pid, используется для непосредственного уничтожения отсоединенного процесса.
Это может быть более BASHy, чем возможно, но, возможно, это поможет в правильном направлении.
Короче говоря, найдите все папки с apple, измените сортировку так, чтобы
/tmp/apple/test/apple
не создавал проблем, когда первое "яблоко" меняется не по порядку. Затем передайте вывод в цикл while с функцией read, загружающей переменную, содержащую все папки, которые совпадают. Наконец, переместите папки в нужную структуру имен.
для каталогов, попробуйте
find ./ -regex '^.*apple' -type d | sort -r | while read badname ; do mv $badname ${badname/%apple/orange}; done
для имен файлов, (после очистки каталогов)
find ./ -regex '^. apple. ' -type f | sort -r | while read badname ; do mv $badname ${badname/apple/orange}; done
для содержимого файлов есть много других примеров,