我尝试了很多命令。没有人能完成这项工作。如何使用重命名/查找或其他方法在子文件夹中的文件开头递归添加字符串?
例子file.jpg --> image_file.jpg
find . -name '*.jpg' -exec rename -n "s/^/image_/" *.jpg {} +
for pic in '*.jpg' ; do rename -n "s/^/image_/ ${pic}"; done
find . -name '*.jpg' -exec rename -n "s/^/image_/ .jpg '{}' \;
find "/files/" -type f -exec rename 's/^/image_/' '{}' \;
find . -name '*.jpg' -type f -exec bash -c 'echo "$1" "${1/^/image_/}"' -- {} \;
为什么这么说Invalid cross-device link
find . -name '*.jpg' -execdir rename 's:./:/image_:' {} +
答案1
我找到了!此命令在所有子目录中递归地在每个文件的开头添加一个字符串。我还不知道它为什么有效,但有效。删除“-n”可获得实际结果。
find . -name '*.jpg' -execdir rename -n 's:./:./image_:' {} +
结果示例:rename(./28652316400.jpg, ./image_28652316400.jpg)
s
意思是替代。:
据我理解,这意味着转到第一次出现的“。”,然后当你转到“。”时,用“image_”替换并退出。(但我可能错了)。阅读这里更多关于 bash 和脚本中冒号的含义。