我试图根据文件的父目录名称来命名文件。对于 中的文件./dir*/dir*/
,我想将该文件命名为"dir*_dir*"
或"dir*dir*"
(加上一些常量附加文本和扩展名,但这与问题无关)。我有类似的东西:
for file in ./dir*/dir*/*GABA*.dat; do
tag=${file%/*}
tag=${tag} #here, I believe the value of the variable will be "dir*/dir*",
so this is where I was thinking to remove the '/'
tag=$(echo "$tag" | tr '[:upper:]' '[:lower:]')
mv -- "$file" "./GABA/${tag}.dat"
done
我并不是特别要求对整个代码进行评估,尽管这也会受到欢迎(它在另一个类似的上下文中似乎运行正常),但特别是如何更新我的“tag”变量以删除dir*/dir*
.谢谢!
答案1
/
用。。。来代替_
:
tag=${tag//\//_}
答案2
和zsh
:
autoload zmv # best in ~/.zshrc
zmv -n '(dir*)/(dir*)/*GABA*.dat' 'GABA/${(L)1}${(L)2}.dat'
-n
如果高兴就删除。
(L)
是一个参数扩展标志,用于将扩展转换为小写。