bash – find – grep花了太多时间
发布时间:2020-12-15 21:02:24 所属栏目:安全 来源:网络整理
导读:首先,我是一个使用bash脚本的新手,所以请原谅我,如果我犯了轻易的错误. 这是我的问题.我需要下载我公司的网站.我使用wget完成了这个没有问题,但是因为有些文件有?符号和窗口不喜欢文件名吗?我必须创建一个重命名文件的脚本,并更新调用重命名文件的所有文件
首先,我是一个使用bash脚本的新手,所以请原谅我,如果我犯了轻易的错误.
这是我的问题.我需要下载我公司的网站.我使用wget完成了这个没有问题,但是因为有些文件有?符号和窗口不喜欢文件名吗?我必须创建一个重命名文件的脚本,并更新调用重命名文件的所有文件的源代码. 为此,我使用以下代码: find . -type f -name '*?*' | while read -r file ; do SUBSTRING=$(echo $file | rev | cut -d/ -f1 | rev) NEWSTRING=$(echo $SUBSTRING | sed 's/?/-/g') mv "$file" "${file//?/-}" grep -rl "$SUBSTRING" * | xargs sed -i '' "s/$SUBSTRING/$NEWSTRING/g" done 这有两个问题. >这花了太长时间,我已经等了5个多小时还在继续. 感谢所有的评论,我将尝试2 separete步骤,并且,同样,和FYI一样,有3291个文件是用wget下载的,仍然认为使用bash脚本比其他工具更喜欢这个? 解决方法
好的,这是想法(未经测试):
>在第一个循环中,只需移动文件并组成全局sed替换文件 码: sedfile=/tmp/tmp.sed data=data rm -f $sedfile # locate ourselves in the subdir to preserve the naming logic cd $data # rename the files and compose the big sedfile find . -type f -name '*?*' | while read -r file ; do SUBSTRING=$(echo $file | rev | cut -d/ -f1 | rev) NEWSTRING=$(echo $SUBSTRING | sed 's/?/-/g') mv "$file" "${file//?/-}" echo "s/$SUBSTRING/$NEWSTRING/g" >> $sedfile done # now apply the big sedfile once on all the files: # if you need to go recursive: find . -type f | xargs sed -i -f $sedfile # if you don't: sed -i -f $sedfile * (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |