在 Bash 中递归更改文件扩展名
- 2024-10-24 08:50:00
- admin 原创
- 85
问题描述:
我想递归遍历目录并更改特定扩展名的所有文件的扩展名,例如.t1
。.t2
执行此操作的 bash 命令是什么?
解决方案 1:
使用:
find . -name "*.t1" -exec bash -c 'mv "$1" "${1%.t1}".t2' - '{}' +
如果有空rename
,请使用以下其中之一:
find . -name '*.t1' -exec rename .t1 .t2 {} +
find . -name "*.t1" -exec rename 's/.t1$/.t2/' '{}' +
对于单个文件,请使用+
分隔符;对于一次性重命名所有文件,请使用;
分隔符。例如:对于单个文件
find . -name "*.t1" -exec bash -c 'mv "$1" "${1%.t1}".t2' - '{}' +
对于 find 命令范围内的所有文件:
find . -name "*.t1" -exec bash -c 'mv "$1" "${1%.t1}".t2' - '{}' ;
解决方案 2:
在全新安装的 Debian 11 上,所有建议的解决方案都对我不起作用。这应该适用于任何 Posix/MacOS
find ./ -depth -name "*.t1" -exec sh -c 'mv "$1" "${1%.t1}.t2"' _ {} ;
所有内容归功于:https:
//askubuntu.com/questions/35922/how-do-i-change-extension-of-multiple-files-recursively-from-the-command-line
解决方案 3:
如果您的版本bash
支持该globstar
选项(版本 4 或更高版本):
shopt -s globstar
for f in **/*.t1; do
mv "$f" "${f%.t1}.t2"
done
解决方案 4:
我会在 bash 中这样做:
for i in $(ls *.t1);
do
mv "$i" "${i%.t1}.t2"
done
编辑:我的错误:它不是递归的,这是我递归更改文件名的方法:
for i in $(find `pwd` -name "*.t1");
do
mv "$i" "${i%.t1}.t2"
done
解决方案 5:
或者您可以简单地安装mmv
命令并执行:
mmv '*.t1' '#1.t2'
这#1
是第一个 glob 部分,即*
in *.t1
。
或者在纯 bash 中,一种简单的方法是:
for f in *.t1; do
mv "$f" "${f%.t1}.t2"
done
(即:for
无需借助外部命令(如ls
或find
)即可列出文件)
高血压
解决方案 6:
我偷懒复制粘贴了其中一个解决方案,但没有成功,但我已经fd-find
安装了,所以我使用了它:
fd --extension t1 --exec mv {} {.}.t2
从fd
的手册页中,执行命令时(使用--exec
):
The following placeholders are substituted by a
path derived from the current search result:
{} path
{/} basename
{//} parent directory
{.} path without file extension
{/.} basename without file extension
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD