我在当前目录中有一堆不同名称的目录:
Hello World/
Dr. Dre - Still Dre/
Angry Birds/
2018 Grand Prix Race Highlights/
并且在每个目录中都有文件(分别为一个):
source.c
song.aac
setup.apk
spanish.mp4
我想将每个文件重命名为它们的目录名,但扩展名不应更改。示例输出文件:
Hello World.c
Dr. Dre - Still Dre.aac
Angry Birds.apk
2018 Grand Prix Race Highlights.mp4
输出位置无关紧要。
我找到了很多用于在当前目录中重命名文件的解决方案for file in *
,mv "$file" "${file/oldname/newname}"
但我的文件位于 1 级深的子目录中,所以我目前拥有的是:
currdir=$(pwd)
for dir in */
do
cd ${dir}
file=$(echo *)
ext=${file##*.}
mv "*" "${dir}.${ext}"
cd ${currdir}
done
我正在使用 zsh,当我尝试运行此函数时zsh: source.c not found
,我怀疑该行可能有问题file=$(echo *)
。我也不喜欢我在那里所做的事情的复杂性,所以也许有一种更清洁的方法,甚至是单行的。我只是想用这些已经默认在Ubuntu安装,如命令mv
,find
,sed
,vim
,grep
,等的目录名可能有这样的符号字符$
,&
,.
,等。因此,请同时容纳怪异的名字。
我只会做:
autoload zmv
zmv '(*)/(*)(.*)' '$1$3'
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句