end*_*ith 29 linux file-management command-line rename
对于数千个子文件夹中的数千个文件,如何递归地重命名目录中的所有文件,将一个文件扩展名更改为另一个?我看到很多命令几乎可以满足我的要求,但并不完全。
find . -name "*.andnav" -exec rename .andnav .tile {} \;
syntax error at (eval 1) line 1, near "."
Run Code Online (Sandbox Code Playgroud)
...
rename -nv 's/\.andnav$/\.tile/i' *.andnav
0.png.andnav renamed as 0.png.tile
Run Code Online (Sandbox Code Playgroud)
end*_*ith 36
弄清楚了
find . -name "*.andnav" -exec rename -v 's/\.andnav$/\.tile/i' {} \;
./0/0.png.andnav renamed as ./0/0.png.tile
./0/1.png.andnav renamed as ./0/1.png.tile
./1/0.png.andnav renamed as ./1/0.png.tile
./1/1.png.andnav renamed as ./1/1.png.tile
Run Code Online (Sandbox Code Playgroud)
当然在实际执行时删除 -v,否则会浪费时间显示所有文件
Gil*_*il' 23
使用 zsh:
autoload zmv
zmv -n '(**/)(*).andnav' '$1$2.tile'
Run Code Online (Sandbox Code Playgroud)
删除-n以实际执行重命名。
cYr*_*rus 18
就像是:
find . -name '*.andnav' -exec sh -c 'mv "$0" "${0%.andnav}.tile"' {} \;
Run Code Online (Sandbox Code Playgroud)
以上开始遍历从当前工作目录 ( .)开始的目录树。每次文件名匹配模式*.andnav(例如,foo.andnav)时,将执行以下命令:
sh -c 'mv "$0" "${0%.andnav}.tile"' foo.andnav
Run Code Online (Sandbox Code Playgroud)
where $0isfoo.andnav并用so 基本上${0%.andnav}.tile替换.andnav后缀.tile:
mv foo.andnav foo.tile
Run Code Online (Sandbox Code Playgroud)