首页 > 解决方案 > 重命名目录和(深度嵌套的)子目录中的所有文件

问题描述

重命名目录和子目录中的所有文件(递归)的shell命令是什么?

我想为所有目录和子目录中以*scssfrom filename.scssto结尾的所有文件添加下划线。_filename.scss

我已经找到了与此相关的答案,但大多数(如果不是全部)都要求您知道文件名本身,我不希望这样做,因为文件名不同,而且需要记住很多,甚至手动键入它们,其中一些是深度嵌套的在目录中。

标签: bashshellunix

解决方案


编辑:我的印象是该bash -c位对于找到的元素的多次扩展是必要的;阿努巴瓦的回答证明我错了。我现在将那一点留在答案中,因为它适用于 OP。

find . -type f -name *scss -exec bash -c 'mv $1 _$1' -- {} \;
  • find .-- 在当前目录中查找(递归)
  • -type f-- 文件
  • -name *scss-- 匹配模式*scss
  • -exec-- 对找到的每个元素执行
  • bash -c '...'-- 在子shell中执行命令
  • ---- 结束选项解析
  • {}-- 扩展为找到的元素的名称(成为bash -c命令的位置参数)
  • \;-- 结束-exec命令

推荐阅读