Shell-Script

Shell Script:使用“find”執行shell命令,其中包含“find”返回的“filename”(不帶副檔名)

  • June 9, 2015

我在目錄-A 中有幾個副檔名為“*.f90”的文件。我想對 shell 腳本中的每個文件應用以下命令。例如文件名.f90

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

這將生成一個我想儲存在目錄-B 中的“.pyf”文件。

我正在使用以下腳本。

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

這使用 find 函式的輸出並在 -exec 命令中替換它以代替“{}”。這意味著在“{}”的每個位置,我的程式碼都將用“filename.f90”替換它。因為我只想將文件名(即不帶副檔名)放在 exec 命令中代替“{}”

我嘗試使用 basename 命令,它只提供文件名,但我原來的執行命令中的“{}”仍然包含副檔名。我使用了以下程式碼。

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

我該如何解決這個問題。我還想在目錄-B 中執行我的命令,以便在目錄-B 中創建“.pyf”文件。我該怎麼做呢?

使用我最喜歡的單線:

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

引用自:https://unix.stackexchange.com/questions/208138