Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 删除bash脚本中的tar.gz文件_Linux_Bash_Unix - Fatal编程技术网

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

Linux 删除bash脚本中的tar.gz文件,linux,bash,unix,Linux,Bash,Unix,我当前正试图从另一个目录中删除最旧的目录备份。这些备份使用“tar-cpPzvf”进行压缩。我的简单问题是,是否有办法使用xargs和“rm”命令删除tar.gz文件 这是我目前使用的线路: sudo ls -t $BACKUPTARGET/adhoc/daily | tail -n +$NUMDAILY | xargs rm 使用的变量定义为: $BACKUPTARGET:指向“/backup” $NUMDAILY:此值从指定要保留的备份数量的不同配置文件中剪切而来 当我运行脚本时,会列

我当前正试图从另一个目录中删除最旧的目录备份。这些备份使用“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文件,可能无法删除它们,但我很好奇是否有办法让我的脚本不那么复杂。

我认为最简单的更改就是更改您的工作目录:

sudo ls -t $BACKUPTARGET/adhoc/daily | tail -n +$NUMDAILY | \
    ( cd $BACKUPTARGET/adhoc/daily && xargs rm ; )
这应该行得通

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

tail-n+2
输出从第二行开始的行;要留下两个,你必须从第三个开始,e。g、 :

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

旁白:您是否意识到在脚本中,
rm
将作为运行此命令的用户运行,而不一定是
root
?按照您的方式,只有
ls
以root身份运行。另外:“如果不解压缩,可能无法删除.tar.gz文件”-poppycock!当然你可以删除它们。它们是非常普通的文件。我不知道有人可以删除这些tar文件。说到bash,我是个初学者。您向我展示的这个命令似乎工作正常,但没有留下正确的备份量。由于$NUMDAILY=2,它似乎每次只留下一个,而它应该留下两个。我还有一个if语句,它仅在文件数大于要保留的每日备份数时处理上述行。
… tail -n +$NUMDAILY …
rm `ls -t $BACKUPTARGET/adhoc/daily/*|tail -n+$((NUMDAILY+1))`