Shell Script: используйте «find» для запуска оболочки команду, содержащую «имя файла» (без расширения), возвращенную из «find»,

У меня есть несколько файлов с расширениями «* .f90» в каталоге -A. Я хочу применить следующую команду для каждого файла в сценарии оболочки. например filename.f90

f2py -h filename.pyf -m filename /path/to/directory-A/filename.f90 

Это создаст файл «.pyf», который я хочу сохранить в каталоге-B.

Я использую следующий скрипт.

 find "/path/to/directory-A/" -name "*.f90" -exec f2py -h {}.pyf -m {} {}.f90\; 

Это использует вывод функции find и заменяет его в команде -exec вместо «{}». что означает, что каждый, где вместо "{}" мой код заменит его на "filename.f90". где, поскольку я хочу, чтобы вместо команды «command» вместо имени файла вместо «{» "

Я попытался использовать команду basename, она работает только в предоставлении имени файла, но «{}» в моей исходной команде выполнения все еще содержит расширение. Я использовал следующий код.

 find "/path/to/directory-A/" -name "*.f90" -exec basename\ {} \ .f90; -exec f2py -h {}.pyf -m {} {}.f90\; 

Как исправить эту проблему. Также я хочу выполнить свою команду в каталоге-B, так что файлы «.pyf» создаются в каталоге -B. Как мне это сделать?

2 Solutions collect form web for “Shell Script: используйте «find» для запуска оболочки команду, содержащую «имя файла» (без расширения), возвращенную из «find»,”

Используйте мой любимый лайнер:

 cd directory-A for i in *p90; do f2py -h ${i%.p90}.pyf -m ${i%.p90} $i; mv ${i%.p90}.pyf directory-B; done 

Вы должны понимать, что «расширение» – это просто странная часть имени файла в unix-подобных операционных системах и не имеет специального лечения.

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

 find "/path/to/directory-A/" -name "*.f90" -exec /path/to/callf2py {} \; 

callf2py:

 #!/bin/sh f=$(basename $1) f2py -h $f.pyf -m $f.f90 
  • Проверьте, существует ли файл файла в другом файле и обновляется конкретный столбец первого файла
  • Назначить имя файла переменной с расширением pathname
  • Создание дополнительного скрипта копирования и вставки
  • Получить список пакетов, которые не установлены в системе Debian
  • Как запустить скрипт на tty вместо запроса входа в systemd?
  • Создание следующего доступного имени файла для шаблона (02-output.log и т. Д.)
  • Как препроцитировать CUPS 'lp` со сценарием для конкретного принтера?
  • Как сделать bash встроенным «read» игнорировать прокомментированные или пустые строки?
  • Почему мое условие всегда ложно?
  • Синхронизация одинаковых каталогов между двумя Linux-серверами
  • Проверьте количество записей из исходного файла и загруженной цели
  • Linux и Unix - лучшая ОС в мире.