我希望递归地遍历一个目录,并将所有扩展名为 .t1的文件的扩展名更改为 .t2。这样做的 bash 命令是什么?
.t1
.t2
用途:
find . -name "*.t1" -exec bash -c 'mv "$1" "${1%.t1}".t2' - '{}' +
如果你有可用的 rename,那么使用以下的 一:
rename
find . -name '*.t1' -exec rename .t1 .t2 {} +
find . -name "*.t1" -exec rename 's/\.t1$/.t2/' '{}' +
我会在 bash 中这样做:
for i in $(ls *.t1); do mv "$i" "${i%.t1}.t2" done
编辑: my mistake : it's not recursive, here is my way for recursive changing filename :
for i in $(find `pwd` -name "*.t1"); do mv "$i" "${i%.t1}.t2" done
或者您可以简单地安装 mmv命令并执行以下操作:
mmv
mmv '*.t1' '#1.t2'
这里的 #1是第一个通球部分,即 *.t1中的 *。
#1
*.t1
*
或者在纯 bash 中,一个简单的方法是:
for f in *.t1; do mv "$f" "${f%.t1}.t2" done
(例如: for可以在没有外部命令(如 ls或 find)帮助的情况下列出文件)
for
ls
find
高温
如果您的版本 bash支持 globstar选项(版本4或更高版本) :
bash
globstar
shopt -s globstar for f in **/*.t1; do mv "$f" "${f%.t1}.t2" done
所有建议的解决方案都不适用于新安装的 Debian14。 这在任何 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
我懒散地复制粘贴了其中一个解决方案,但是没有成功,但是我已经安装了 fd-find,所以我使用了:
fd-find
fd --extension t1 --exec mv {} {.}.t2
在执行命令(使用 --exec)时,从 fd的 manpage 中可以看到:
--exec
fd
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