【发布时间】:2023-11-30 00:18:02
【问题描述】:
Bash 新手在这里尝试将文件夹的名称插入到该文件夹内的某些文件中。
问题是这些文件在主目录的子文件夹的子文件夹中,而且每个级别的名字都不一样。
例如,主文件夹interviews 可能包含John Doe,而在John Doe 下是一个目录Images,其中包含一个文件Screenshot.jpg。但也可能有John Smith 的文件夹Etc,其中12_Screenshot 2.jpg。
我想重命名所有这些包含Screenshot 的文件,在文件名前插入John Doe 或John Smith。
我尝试调整我找到的几个脚本并从interviews 目录运行它们:
for i in `ls -l | egrep '^d'| awk '{print $10}'`; do find . -type f -name "*Screenshot*" -exec sh -c 'mv "$0" "${i}${0}"' '{}' \; done
之后终端给出插入符号提示,就好像我遗漏了什么一样。我也试过了
find -regex '\./*' -type d -exec mv -- {}/*/*Screenshot* {}/{}.jpg \; -empty -delete
返回find: illegal option -- r
理论上第二个将文件向上移动到父文件夹这一事实不是问题,因为无论如何我最终都必须这样做。
【问题讨论】:
-
所以你想要
interviews/John Doe/images/Screenshot.jpg->interviews/John Doe/images/John Doe-Screenshot.jpg? -
我认为您在第一次尝试中可能会在
\;之后丢失;。但无论如何你都不应该解析ls的输出。 -
@MarcB 完全正确。 @EtanReisner 我试过
for i in $( ls ); do find . -type f -name "*Screenshot*" -exec sh -c 'mv "$0" "${i}${0}"' '{}' \; ; done。它执行但没有效果。i在 mv 字符串中似乎为空。 -
那是因为你把它放在单引号里=没有替换
-
@Ionewasp mv 命令,还是括号?
标签: macos bash directory batch-rename