我需要重命名大约200万张图片。
文件看起来像image.jpg?arg=value
,需要在没有参数的情况下重命名为image.jpg
。
以下是我目前正在做的事情:
sudo find . -name "*.jpg?*" -exec rename 's/(\?.*)//' {} \;
这可以完成工作但似乎需要永远。有人建议如何加快速度吗?
答案 0 :(得分:4)
你能试试吗
sudo find . -name "*.jpg*" -print0 | xargs -0 -I '{}' -P4 -n1 rename 's/(\?.*)//' {} \;
来自xargs
--max-procs=max-procs
-P max-procs
Run up to max-procs processes at a time; the default is 1. If
max-procs is 0, xargs will run as many processes as possible at
a time. Use the -n option with -P; otherwise chances are that
only one exec will be done.
这里我将最大子进程限制为4.如果你想要更多,那么标记-P0将占用最多可能的子进程,但请记住,你的CPU将会严重超载。
或强>
使用gnu parallel
答案 1 :(得分:2)
并行化重命名。启动两个(或三个,四个)shell并运行该命令。请确保以某种方式分离命令的图像,这样就不会在同一图像上运行2个命令。
答案 2 :(得分:0)
我在Ubuntu 14.04上尝试了这个,但它不起作用。命令执行成功但没有任何反应。我认为重命名正则表达式部分是不对的。要检查一下:
<script type="text/javascript">
window.onbeforeunload = function() {
$.ajax
({
url: 'logout.php',
data: "",
type: 'post',
success: function()
{
.....
}
});
}
</script>
但是将正则表达式改为以下作品。 $ echo Screenshot_from_2015-08-17_122834.png.de4Mzv2 | sed's /.[^.]*$//' Screenshot_from_2015-08-17_122834.png
在@realspirituals建议的命令中使用它,我有以下文件:
$ echo Screenshot_from_2015-08-17_122834.png.de4Mzv2 | sed 's/(\?.*)//'
Screenshot_from_2015-08-17_122834.png.de4Mzv2