我的目录下有几个文件,它们的名称均为形式*.foo.bar
。我想编写一个bash脚本,以通过删除该.foo
部分来重命名每个文件。
例如,假设发行tree ~/dir/
退货
/home/user/dir/
|- george.foo.bar
|- john.foo.bar
|- paul.foo.bar
|- ringo.foo.bar
|- subdir
|- jimmy.foo.bar
|- robert.foo
然后运行script ~/foo/
应将的内容更改~/foo
为
/home/user/dir/
|- george.bar
|- john.bar
|- paul.bar
|- ringo.bar
|- subdir
|- jimmy.bar
|- robert.foo
您可以使用参数扩展机制
shopt -s globstar
for file in **/*foo.bar; do
prefix="${file%.foo*}"
suffix="${file##*.foo}"
mv -v -- "$file" "$prefix$suffix"
done
的${file%.foo*}
匹配后缀移除(只留下前缀),并${file#*.foo}
移除了前缀(离开后缀)。**
需要双星星球()遍历所有子目录并setopt -s globstar
允许该星球。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句