我想递归地遍历一个目录,并将所有具有特定扩展名的文件的扩展名更改为.t1,比如.t2。执行此操作的bash命令是什么?
.t1
.t2
dwbf0jvd1#
用途:
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/' '{}' +
sqyvllje2#
没有一个建议的解决方案对我在新安装的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
omjgkv6w3#
如果您的bash版本支持globstar选项(版本4或更高版本):
bash
globstar
shopt -s globstar for f in **/*.t1; do mv "$f" "${f%.t1}.t2" done
w7t8yxp54#
我在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
nlejzf6q5#
或者你可以简单地安装mmv命令并执行以下操作:
mmv
mmv '*.t1' '#1.t2'
这里,#1是第一团部分,即*.t1中的*。或者在纯bash的东西中,一个简单的方法是:
#1
*.t1
*
for f in *.t1; do mv "$f" "${f%.t1}.t2" done
(i.e.:for可以在没有外部命令(如ls或find)的帮助下列出文件高温加热
for
ls
find
cnh2zyt36#
我对其中一个解决方案的懒惰复制粘贴不起作用,但我已经安装了fd-find,所以我使用了:
fd-find
fd --extension t1 --exec mv {} {.}.t2
在fd的手册页中,当执行命令时(使用--exec):
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
6条答案
按热度按时间dwbf0jvd1#
用途:
如果您有
rename
可用,请使用以下之一:sqyvllje2#
没有一个建议的解决方案对我在新安装的debian 11上有效。这应该适用于任何Posix/MacOS
所有贷项:https://askubuntu.com/questions/35922/how-do-i-change-extension-of-multiple-files-recursively-from-the-command-line
omjgkv6w3#
如果您的
bash
版本支持globstar
选项(版本4或更高版本):w7t8yxp54#
我在bash中这样做:
编辑:我的错误:它不是递归的,下面是我递归修改文件名的方法:
nlejzf6q5#
或者你可以简单地安装
mmv
命令并执行以下操作:这里,
#1
是第一团部分,即*.t1
中的*
。或者在纯bash的东西中,一个简单的方法是:
(i.e.:
for
可以在没有外部命令(如ls
或find
)的帮助下列出文件高温加热
cnh2zyt36#
我对其中一个解决方案的懒惰复制粘贴不起作用,但我已经安装了
fd-find
,所以我使用了:在
fd
的手册页中,当执行命令时(使用--exec
):