Shell-Script
Shell Script:使用“find”執行shell命令,其中包含“find”返回的“filename”(不帶副檔名)
我在目錄-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