Bash 使用find、xargs删除文件扩展名

Bash 使用find、xargs删除文件扩展名,bash,shell,Bash,Shell,我正在尝试通过实践删除文件扩展名“log”: find -name "*.log" | xargs -t -I {} mv {} {{}%.log} 我可能只会使用重命名: find -name '*.log' | xargs rename .log '' 或shell脚本: find -name '*.log' | while read f; do mv $f ${f%.log}; done 要想使用bash参数扩展,需要将值指定给一个参数: for file in $(find -na

我正在尝试通过实践删除文件扩展名“log”:

find -name "*.log" | xargs -t -I {} mv {} {{}%.log}

我可能只会使用
重命名

find -name '*.log' | xargs rename .log ''
或shell脚本:

find -name '*.log' | while read f; do mv $f ${f%.log}; done

要想使用bash参数扩展,需要将值指定给一个参数:

for file in $(find -name '*.log') ; do mv ${file} ${file%.log} ; done

如果您使用的是
bash
4或更高版本,只需使用

shopt -s globstar
for f in **/*.log; do
    mv -- "$f" "${f%.log}"
done
否则,使用
find
执行一个shell,其参数是要重命名的文件;这允许您使用参数展开来剥离扩展

find -name '*.log' -exec sh -c 'mv -- "$1" "${1%.log}"' {} \;

有多个
rename
s,它们采用不同的参数。您是否可以更新您的问题,以明确显示您试图实现的目标?这似乎正好完成了您在问题中试图做的事情。