在目录名称前添加目录名称

约瑟夫

我大约有100个目录,例如:

  • 步行,
  • 写作,
  • 跳舞,
  • 游泳。

这些目录中的每个目录都包含一组文件。

l想在目录的文件名中添加目录的前缀名称。

例如:

writing :
0ZPQl5QUvo0_000202_000212.mp4  
AFV8x8ezN8g_000016_000026.mp4  
-HutuMqTAPw_000275_000285.mp4 
qtvsw6h3yQo_000228_000238.mp4  
Ub0rc6U6nfI_000100_000110.mp4

变成:

writing :
writing_0ZPQl5QUvo0_000202_000212.mp4  
writing_AFV8x8ezN8g_000016_000026.mp4  
writing_-HutuMqTAPw_000275_000285.mp4 
writing_qtvsw6h3yQo_000228_000238.mp4  
writing_Ub0rc6U6nfI_000100_000110.mp4

我怎样才能做到这一点?

钢铁司机

这是您脚本的稍有改进的版本-主要区别是

  • 使用Shell Glob*代替$(ls)-参见Bash Pitfall#1

  • 引用任何变量扩展名(允许文件名带有空格或其他有趣的字符-参见Bash Pitfall#2

  • 标记mv使用--GNU扩展名的选项的结尾-这使它也可以处理以连字符开头的文件名

所以

for d in *; do 
  [[ -d "$d" ]] && cd "$d" || continue
  for f in *.mp4; do 
    echo mv -v -- "${f}" "${d}_${f}"
  done
  cd -
done

或者,更可移植的是,您可以循环./*.mp4以防止出现连字符-但随后您必须在mv

for d in *; do 
  [ -d "$d" ] && cd "$d" || continue
  for f in ./*.mp4; do 
    echo mv -v "${f}" "${d}_${f#./}"
  done
  cd -
done

无论哪种情况,一旦确定它可以按预期工作,就将其移除echo-v如果需要,请移除)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章