通过在 Linux 中的文件开头添加字符串来递归重命名文件

通过在 Linux 中的文件开头添加字符串来递归重命名文件

我尝试了很多命令。没有人能完成这项工作。如何使用重命名/查找或其他方法在子文件夹中的文件开头递归添加字符串?

例子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 和脚本中冒号的含义。

相关内容