linux - 将具有特定扩展名的子目录文件重命名为父文件夹的名称
问题描述
我有许多文件夹,我需要将其中的一些文件重命名为特定扩展名,即“.jpeg”为父文件夹的名称加上其现有名称。
META_10234
--- file1.jpeg
--- file2.jpeg
META2_10235
--- file1.jpeg
--- file2.jpeg
期望的输出:
META_10234
---META_10234_file1.jpeg
---META_10234_file2.jpeg
我试过做这样的事情:
for file in $(ls | grep 'META_*'); do mv "./$file/*.jpeg" "./$f/$f*_.jpeg"; done;
错误是:
mv ./META_10234/.jpeg: No such file or directory
如何匹配子目录中的任何文件?
解决方案
这很简单。
不需要ls
/ grep
,只需使用一个简单的 glob - 您确实需要循环,但请记住您是单独重命名文件,而不是整体重命名。
$: key="${PWD##*/}"
$: for f in *.jpeg; do mv "$f" "${key}_$f"; done
$PWD
是当前记录的目录。
Bash 参数解析用于#
从字符串的前面删除 glob 模式。##
让它变得“贪婪”,尽可能匹配而不是最不匹配。这意味着"${PWD##*/}"
尽可能多地从值的前面删除,直到它看到 a /
(即,前导路径),只留下当前目录的名称。
其他工具还有其他方法,但除非你有无数,否则这将处理得很好。
推荐阅读
- java - Scala:无法取消引用 List[scala.collection.immutable.HashMap[String,Double]]
- html - HTML/CSS 将嵌入的文本大小调整为内容大小
- javascript - HTML Button onclick 调用了错误的函数
- vb.net - 使用 VB 使用 Acrobat SDK (Interop.Acrobat.dll) 从 pdf 中提取注释。网
- typo3 - 将 Typo3 7.6 更新到 8.7,无法让前端使用 XAMPP 在本地测试环境中工作
- python - Postgres 累积磁盘 I/O
- c++ - 浮点定向舍入和优化
- node.js - 回调函数值访问nodejs中的其他函数
- elasticsearch - 带有 ES 字段映射到“geo_shape”的 JanusGraph
- java - 如何从刚创建的数据库中读取 java 中的 mongo 数据?