我有带破折号的子文件夹(例如名为 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 '{}' \;