bash - 重命名目录和(深度嵌套的)子目录中的所有文件
问题描述
重命名目录和子目录中的所有文件(递归)的shell命令是什么?
我想为所有目录和子目录中以*scss
from filename.scss
to结尾的所有文件添加下划线。_filename.scss
我已经找到了与此相关的答案,但大多数(如果不是全部)都要求您知道文件名本身,我不希望这样做,因为文件名不同,而且需要记住很多,甚至手动键入它们,其中一些是深度嵌套的在目录中。
解决方案
编辑:我的印象是该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
命令
推荐阅读
- amazon-web-services - 防止 AWS cloudformation 中的回滚
- javascript - 尽管在 vega-lite 教程中逐步执行,但遇到 TypeError
- .net - 如何在可以在项目中覆盖的库(NuGet 包)中进行默认设置?
- arrays - 修复致命错误:数组中的索引超出范围
- git - 我不明白带有子模块的 git pull
- matlab - 调试 MEX 文件 - 使用 -Dgdb 启动 MATLAB 不会产生 gdb 提示
- google-docs-api - 确定 Google Docs API 的状态?
- node.js - Cloud Functions:如何获取特定 json 属性的值?
- sql - SQL Server:为每个 BAY 插入缺失的行总共为 7
- python - networkx2 adjlist_inner_dict_factory 和 adjlist_outter_dict_factory 有什么区别