Bash
在匹配位置的文件夾的文件上遞歸執行命令,而不是在原始文件中
我想遞歸地將文件從文件夾轉換
.docx
為.doc
。問題是所有輸出文件都是在我執行以下命令的文件夾中創建的,而不是在源文件的位置:find -type f -name "*.docx"-exec libreoffice --convert-to doc {} \;
我知道 find 將源文件提供給
libreoffice
命令,並且輸出顯然必須在目前位置,所以我如何使用命令遞歸循環到文件夾並從找到文件的位置執行命令,而不是最初的?
-execdir
如果你find
支持它,那就是它的用途。Linux 系統上的預設查找 GNUfind
確實有它。來自man find
:-execdir 命令;
-execdir 命令 {} +
與 -exec 類似,但指定的命令是從包含匹配文件的子目錄執行的,通常不是您開始查找的目錄。
$$ . . . $$
所以你要:
find -type f -name "*.docx" -execdir libreoffice --convert-to doc {} \;
您應該能夠將 find 輸出傳遞給 shell 命令來執行此操作。
find . -type f -name \*.docx -exec sh -c 'echo libreoffice --convert-to-doc {} --outdir $(dirname {})' \;
@EdgarMagallon 評論中的建議實際上比我的要簡單。當然,對於這個案例,我會建議他的命令。