我大约有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] 删除。
我来说两句