删除bash脚本中的tar.gz文件

时间:2016-12-08 01:33:29

标签: linux bash unix

我目前正在尝试从其他目录中删除最旧的目录备份。这些备份使用“tar -cpPzvf”进行压缩。我的简单问题是,是否有办法使用xargs和“rm”命令删除tar.gz文件

这是我目前使用的行:

sudo ls -t $BACKUPTARGET/adhoc/daily | tail -n +$NUMDAILY | xargs rm

使用的变量定义为:

  • $BACKUPTARGET:指向“/ backup”
  • $NUMDAILY:此值从不同的配置文件中删除,该文件指定要保留的备份数。

当我运行我的脚本时,会列出除指定号码之外的最旧备份,但是我收到此错误:

rm: cannot remove 'david-lenovo.etc.2016-12-07.20-10.tar.gz': No such file or directory
rm: cannot remove 'david-lenovo.etc.2016-12-07.20-09.tar.gz': No such file or directory
rm: cannot remove 'david-lenovo.etc.2016-12-07.20-04.tar.gz': No such file or directory
rm: cannot remove 'david-lenovo.etc.2016-12-07.20-02.tar.gz': No such file or directory
rm: cannot remove 'david-lenovo.etc.2016-12-07.19-54.tar.gz': No such file or directory
rm: cannot remove 'david-lenovo.etc.2016-12-07.19-50.tar.gz': No such file or directory
rm: cannot remove 'david-lenovo.etc.2016-12-07.19-49.tar.gz': No such file or directory
rm: cannot remove 'david-lenovo.etc.2016-12-07.19-48.tar.gz': No such file or directory

我知道可能无法在不首先解压缩tar.gz文件的情况下删除tar.gz文件,但我很好奇是否有办法让我的脚本不那么复杂。

3 个答案:

答案 0 :(得分:1)

我能想到的最简单的改变是改变你的工作目录:

sudo ls -t $BACKUPTARGET/adhoc/daily | tail -n +$NUMDAILY | \
    ( cd $BACKUPTARGET/adhoc/daily && xargs rm ; )

答案 1 :(得分:0)

for single_file in "$(sudo ls -t $BACKUPTARGET/adhoc/daily | tail -n +$NUMDAILY)"
do
rm -rf $single_file
done

这应该有效

答案 2 :(得分:0)

… tail -n +$NUMDAILY …
     

您向我展示的这个命令似乎工作正常,但它没有留下正确数量的备份。似乎每次只留下一个,因为$ NUMDAILY = 2。

tail -n +2输出以第2个开头的行;留下两个,你必须从第三个开始,e。 G:

rm `ls -t $BACKUPTARGET/adhoc/daily/*|tail -n+$((NUMDAILY+1))`