如何在 Linux 中重命名所有包含 dash 的子目录中的所有 .jpg 文件?

如何在 Linux 中重命名所有包含 dash 的子目录中的所有 .jpg 文件?

我有带破折号的子文件夹(例如名为 cd 的子目录)。我需要重命名所有子目录中的所有 .jpg 文件。有什么提示如何操作?我尝试了很多方法,但都没有用(我想是因为我的子文件夹包含破折号 -)谢谢大家!:)

我努力了

find -name '*.jpg' -exec rename $RANDOM.jpg $RANDOM.jpg {} \;

但得到

(Missing operator before jpg?) syntax error at (user-supplied code)
line 3, near "2635.jpg" Bareword found where operator expected at
(eval 4) line 1, near "#line 1 2635.jpg"

答案1

没有需要重命名的情况,因为您可能只需使用 mv 即可完成。

find -name '*.jpg' -exec bash -c 'mv -i "{}" "$RANDOM.jpg"' \;

mv -i 表示交互。覆盖前会询问。

这不是深入测试,只是临时的,以确保文件将获得不同的名称。再进行一些测试:

find -name '*.jpg' -exec echo bash -c 'mv -i "{}" "$RANDOM.jpg"' \;

但是,这会将所有文件放入当前目录。也许使用 -execdir 是一种选择?

find -name '*.jpg' -execdir bash -c 'mv -i "{}" "$RANDOM.jpg"' \;

但是,请备份,小心保管您的数据等等。使用 find 进行批量操作是一种非常有效的工具。我不承担任何责任。

据我所知,这场比赛中没有马。

答案2

你不清楚如何您希望文件重命名。至于哪个您可以使用要重命名的文件find来根据包含破折号的所需模式匹配所有文件:

find [PATH...] -type f -name '*-*' | prename EXPR

如果您也想匹配目录,则需要使用以下-depth选项:

find [PATH...] -depth -name '*-*' | prename EXPR

答案3

我刚刚在名称中带有破折号的子文件夹上尝试了这个,并且成功了。

在 Linux/Ubuntu 中递归重命名部分文件名

要重命名文件,您可以使用寻找命令与改名命令如下:

find -type f -execdir rename 's/OriginalText/NewText/' *.jpg '{}' \;

因此,如果您想将所有 jpg 文件名中的所有破折号“-”替换为下划线“_”,那么您可以输入:

find -type f -execdir rename 's/-/_/' *.jpg '{}' \;

相关内容