Intereting Posts
Переключить ключ к двум модификаторам или использовать мета-ярлыки в терминале (терминатор) Панель запуска приложений с сеткой, например, горячие клавиши навык на вашей собственной сессии Su как root и запустить команду в одной строке Любой способ, с помощью которого я могу преобразовать любую заданную временную метку в стандартную в BASH Символы шрифта после перезагрузки Сохраните stdout и stderr в файле, затем заново создайте вывод позже Символическая ссылка локальная .jpg файл в .jpg файл в Интернете lsof: список только файлов определенного типа Lynx считает, что все сертификаты не доверяют моему файлу конфигурации Получить самый новый файл из структуры каталога год / месяц / дата / время Ошибка g-io-error-quark 39 при остановке dbus-сервиса Перенос всей группы томов LVM2 на RAID5 apt-get install не подключается к серверу при попытке установить libssl-dev на Debian Jessie dd: записать на несколько дисков?

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. Как мне это сделать?

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

 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