2016-12-08 8 views
-1

現在、別のディレクトリから最も古いディレクトリバックアップを削除しようとしています。これらのバックアップは、 "tar -cpPzvf"を使用して圧縮されます。 xargsのを使用してtar.gzファイルを削除する方法があるかどうか私の簡単な質問があり、「RMは」bashスクリプト内のtar.gzファイルを削除します

コマンドこれは私が現在使用しているラインです:

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

を使用する変数は次のように定義されています。

  • $BACKUPTARGET:「/バックアップ」
  • $NUMDAILYに点:この値が保持されるバックアップの数を指定し、異なる構成ファイルから切断されます。私はtar.gz形式のファイルを削除できない場合があります理解し

    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 
    

私は私のスクリプトを実行して実行すると、指定した数を除いて最も古いバックアップが記載されているが、私はこのエラーを取得しています最初に解凍するのではなく、私のスクリプトの複雑さを軽減する方法があるのか​​どうか不思議でした。

+0

を動作するはずです:あなたは、あなたのスクリプトの中で、 'rm'を実行することを実現しますこのコマンドを実行するユーザーとして、必ずしも 'root'である必要はありませんか?あなたが持っている方法では、 'ls'だけがrootとして実行されます。 –

+0

また、「*解凍しないで.tar.gzファイルを削除することはできません」* - poppycock!もちろん削除することができます。彼らは完全に普通のファイルです。 –

答えて

0

私がやって考えることができる最も簡単な変更は、あなたの作業ディレクトリを変更することです:

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

私はこれらのtarファイルを削除できることに気付かなかった。私はそれがbashになると初心者です。あなたが私に示したこのコマンドはうまくいくようですが、正しい量のバックアップを残すわけではありません。 $ NUMDAILY = 2であるため、2つ残す必要があるたびに1つだけ残すようです。私はまた、上記の行だけを処理するif文を持っています。これは、ファイルの数が、保持する日次バックアップの数よりも多い場合です。 –

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

これは別に

関連する問題