在文件中查找特定的字符串,然后删除具有相同文件名的其他文件

时间:2018-07-24 18:28:27

标签: linux bash shell scripting

我需要一些帮助来制作bash脚本。

好的,可以说我在系统中有以下三种文件类型:

fe516148-3e8b-4816-8481-6fd079a46ae9.desc

fe516148-3e8b-4816-8481-6fd079a46ae9.meta

fe516148-3e8b-4816-8481-6fd079a46ae9~fe516148-3e8b-4816-8481-6fd079a46ae9.alias

我需要在.alias文件中找到一个特定的“字符串”,如果在该.alias文件中找到它,则需要删除关联的.meta和{{1} }文件名相同,但文件名稍有不同,在.desc之后有一个附加名称。

该如何编写脚本?

我有

~

它返回

find . -name "*.alias" -exec grep -l "string" {} \;

这是正确的,但是现在我需要它仅返回./fe516148-3e8b-4816-8481-6fd079a46ae9~fe516148-3e8b-4816-8481-6fd079a46ae9.alias ,然后删除所有文件名为fe516148-3e8b-4816-8481-6fd079a46ae9的文件,而不考虑文件扩展名包括fe516148-3e8b-4816-8481-6fd079a46ae9

据我所知。

2 个答案:

答案 0 :(得分:0)

  

脚本:

  filename=fe516148-3e8b-4816-8481-6fd079a46ae9~fe516148-3e8b-4816-8481-6fd079a46ae9.alias
    string=abcd
    if [ "$(grep $string $filename)" -lt 1 ]
    then
        f1=$(echo $filename | cut -d'~' -f1)
        rm -f $f1.desc
        rm -f $f1.meta
    fi

这是基于描述的脚本,其中在文件中grep字符串,如果找到,则从.alias文件中剪切文件名并删除那些文件。

希望这会有所帮助。

答案 1 :(得分:0)

特别感谢大家@Barmar。我可以和它一起工作

for file in $(grep -l "string" *.alias)
do 
    prefix=${file%%~*}
    rm $prefix*.*
done