湖南登哥 發表於 2023-8-29 00:00:00

linux实现自动删除最旧的几个文件详解

<p>
        <span><strong>前言</strong></span></p>
<p>
        因为公司的文件服务器上存有所需的项目war包,一段时间以后,大量不用的工程文件占用磁盘空间,需要定期删除无用的文件。这些文件归属不同的项目目录下,创建的时间各不相同。某些陈旧项目已经数年没有更新。因此,不能只定期删除某个目录下的文件,更不能按时间删除多少天以前的文件。下面话不多说了,来一起看看详细的实现过程吧。</p>
<p>
        <span><strong>推进</strong></span></p>
<ul>
<li>
                统计目录下的文件夹数量<br><code>ls -l | grep '^d' | wc -l</code><br>
                这里的<code>grep '^d'</code>是统计文件夹,如果统计文件数目,用<code>grep '^-'</code>
</li>
        <li>
                列举最老的2个文件<br><code>ls -tr | head -2 | xargs</code>
</li>
        <li>
                删除所有文件<br><code>rm -rf *</code>
</li>
</ul>
<p>
        <span><strong>完工</strong></span></p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_739831">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                        <div class="line number10 index9 alt1">
                                                                10</div>
                                                        <div class="line number11 index10 alt2">
                                                                11</div>
                                                        <div class="line number12 index11 alt1">
                                                                12</div>
                                                        <div class="line number13 index12 alt2">
                                                                13</div>
                                                        <div class="line number14 index13 alt1">
                                                                14</div>
                                                        <div class="line number15 index14 alt2">
                                                                15</div>
                                                        <div class="line number16 index15 alt1">
                                                                16</div>
                                                        <div class="line number17 index16 alt2">
                                                                17</div>
                                                        <div class="line number18 index17 alt1">
                                                                18</div>
                                                        <div class="line number19 index18 alt2">
                                                                19</div>
                                                        <div class="line number20 index19 alt1">
                                                                20</div>
                                                        <div class="line number21 index20 alt2">
                                                                21</div>
                                                        <div class="line number22 index21 alt1">
                                                                22</div>
                                                        <div class="line number23 index22 alt2">
                                                                23</div>
                                                        <div class="line number24 index23 alt1">
                                                                24</div>
                                                        <div class="line number25 index24 alt2">
                                                                25</div>
                                                        <div class="line number26 index25 alt1">
                                                                26</div>
                                                        <div class="line number27 index26 alt2">
                                                                27</div>
                                                        <div class="line number28 index27 alt1">
                                                                28</div>
                                                        <div class="line number29 index28 alt2">
                                                                29</div>
                                                        <div class="line number30 index29 alt1">
                                                                30</div>
                                                        <div class="line number31 index30 alt2">
                                                                31</div>
                                                        <div class="line number32 index31 alt1">
                                                                32</div>
                                                        <div class="line number33 index32 alt2">
                                                                33</div>
                                                        <div class="line number34 index33 alt1">
                                                                34</div>
                                                        <div class="line number35 index34 alt2">
                                                                35</div>
                                                        <div class="line number36 index35 alt1">
                                                                36</div>
                                                        <div class="line number37 index36 alt2">
                                                                37</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash preprocessor bold">#!/bin/bash</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="bash comments">#不同的项目有不同的路径</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="bash plain">array=</code><code class="bash string">'project1'</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="bash plain">array=</code><code class="bash string">'project2'</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="bash plain">array=</code><code class="bash string">'com/project3'</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="bash plain">array=</code><code class="bash string">'com/phase/project4'</code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="bash plain">array=</code><code class="bash string">'project5'</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="bash plain">array=</code><code class="bash string">'com/stor/sproject6'</code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="bash comments">#项目的主干目录是相同的</code>
</div>
                                                                <div class="line number10 index9 alt1">
                                                                        <code class="bash plain">RELEASE=</code><code class="bash string">"/opt/devapps/nexus/sonatype-work/nexus/storage/release/"</code>
</div>
                                                                <div class="line number11 index10 alt2">
                                                                         </div>
                                                                <div class="line number12 index11 alt1">
                                                                        <code class="bash keyword">for</code> <code class="bash plain">path </code><code class="bash keyword">in</code> <code class="bash plain">${array[@]};</code>
</div>
                                                                <div class="line number13 index12 alt2">
                                                                        <code class="bash keyword">do</code>
</div>
                                                                <div class="line number14 index13 alt1">
                                                                        <code class="bash spaces"> </code><code class="bash comments">#拼接文件路径</code>
</div>
                                                                <div class="line number15 index14 alt2">
                                                                        <code class="bash spaces"> </code><code class="bash plain">releasepath=${RELEASE}${path}</code>
</div>
                                                                <div class="line number16 index15 alt1">
                                                                        <code class="bash spaces"> </code><code class="bash functions">cd</code> <code class="bash plain">$releasepath</code>
</div>
                                                                <div class="line number17 index16 alt2">
                                                                        <code class="bash spaces"> </code><code class="bash comments">#判断是否存在该目录</code>
</div>
                                                                <div class="line number18 index17 alt1">
                                                                        <code class="bash spaces"> </code><code class="bash keyword">if</code> <code class="bash plain">[ $? -</code><code class="bash keyword">eq</code> <code class="bash plain">0 ];</code>
</div>
                                                                <div class="line number19 index18 alt2">
                                                                        <code class="bash spaces"> </code><code class="bash keyword">then</code>
</div>
                                                                <div class="line number20 index19 alt1">
                                                                        <code class="bash spaces">  </code><code class="bash functions">echo</code> <code class="bash plain">$releasepath</code>
</div>
                                                                <div class="line number21 index20 alt2">
                                                                        <code class="bash spaces">  </code><code class="bash functions">echo</code> <code class="bash string">"Contains file:"</code>
</div>
                                                                <div class="line number22 index21 alt1">
                                                                        <code class="bash spaces">  </code><code class="bash comments">#输出所有的内容</code>
</div>
                                                                <div class="line number23 index22 alt2">
                                                                        <code class="bash spaces">  </code><code class="bash functions">echo</code> <code class="bash plain">*</code>
</div>
                                                                <div class="line number24 index23 alt1">
                                                                        <code class="bash spaces">  </code><code class="bash plain">num=`</code><code class="bash functions">ls</code> <code class="bash plain">-l | </code><code class="bash functions">grep</code> <code class="bash string">'^d'</code> <code class="bash plain">| </code><code class="bash functions">wc</code> <code class="bash plain">-l`;</code>
</div>
                                                                <div class="line number25 index24 alt2">
                                                                        <code class="bash spaces">  </code><code class="bash comments">#判断文件夹的数量是否超过5个(我只想保留最新的5个文件夹)</code>
</div>
                                                                <div class="line number26 index25 alt1">
                                                                        <code class="bash spaces">  </code><code class="bash keyword">if</code> <code class="bash plain">[$num -gt 5 ];</code>
</div>
                                                                <div class="line number27 index26 alt2">
                                                                        <code class="bash spaces">  </code><code class="bash keyword">then</code>
</div>
                                                                <div class="line number28 index27 alt1">
                                                                        <code class="bash spaces">   </code><code class="bash comments">#计算超过5个多少</code>
</div>
                                                                <div class="line number29 index28 alt2">
                                                                        <code class="bash spaces">   </code><code class="bash plain">num=`</code><code class="bash functions">expr</code> <code class="bash plain">$num - 5`</code>
</div>
                                                                <div class="line number30 index29 alt1">
                                                                        <code class="bash spaces">   </code><code class="bash plain">clean=`</code><code class="bash functions">ls</code> <code class="bash plain">-</code><code class="bash functions">tr</code> <code class="bash plain">| </code><code class="bash functions">head</code> <code class="bash plain">-$num | </code><code class="bash functions">xargs</code><code class="bash plain">`</code>
</div>
                                                                <div class="line number31 index30 alt2">
                                                                        <code class="bash spaces">   </code><code class="bash functions">echo</code> <code class="bash string">"will delete file:"</code>
</div>
                                                                <div class="line number32 index31 alt1">
                                                                        <code class="bash spaces">   </code><code class="bash functions">echo</code> <code class="bash plain">${clean}</code>
</div>
                                                                <div class="line number33 index32 alt2">
                                                                        <code class="bash spaces">   </code><code class="bash comments">#-n1 每次处理1个文件</code>
</div>
                                                                <div class="line number34 index33 alt1">
                                                                        <code class="bash spaces">   </code><code class="bash functions">ls</code> <code class="bash plain">-</code><code class="bash functions">tr</code> <code class="bash plain">| </code><code class="bash functions">head</code> <code class="bash plain">-$num | </code><code class="bash functions">xargs</code> <code class="bash plain">-i -n1 </code><code class="bash functions">rm</code> <code class="bash plain">-rf {}</code>
</div>
                                                                <div class="line number35 index34 alt2">
                                                                        <code class="bash spaces">  </code><code class="bash keyword">fi</code>
</div>
                                                                <div class="line number36 index35 alt1">
                                                                        <code class="bash spaces"> </code><code class="bash keyword">fi</code>
</div>
                                                                <div class="line number37 index36 alt2">
                                                                        <code class="bash keyword">done</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <span><strong>完善</strong></span></p>
<p>
        实际部署时,觉得直接删除文件不妥,应该是先备份到某一目录,再次运行脚本的时候,删除上次备份的文件。</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_598078">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                        <div class="line number10 index9 alt1">
                                                                10</div>
                                                        <div class="line number11 index10 alt2">
                                                                11</div>
                                                        <div class="line number12 index11 alt1">
                                                                12</div>
                                                        <div class="line number13 index12 alt2">
                                                                13</div>
                                                        <div class="line number14 index13 alt1">
                                                                14</div>
                                                        <div class="line number15 index14 alt2">
                                                                15</div>
                                                        <div class="line number16 index15 alt1">
                                                                16</div>
                                                        <div class="line number17 index16 alt2">
                                                                17</div>
                                                        <div class="line number18 index17 alt1">
                                                                18</div>
                                                        <div class="line number19 index18 alt2">
                                                                19</div>
                                                        <div class="line number20 index19 alt1">
                                                                20</div>
                                                        <div class="line number21 index20 alt2">
                                                                21</div>
                                                        <div class="line number22 index21 alt1">
                                                                22</div>
                                                        <div class="line number23 index22 alt2">
                                                                23</div>
                                                        <div class="line number24 index23 alt1">
                                                                24</div>
                                                        <div class="line number25 index24 alt2">
                                                                25</div>
                                                        <div class="line number26 index25 alt1">
                                                                26</div>
                                                        <div class="line number27 index26 alt2">
                                                                27</div>
                                                        <div class="line number28 index27 alt1">
                                                                28</div>
                                                        <div class="line number29 index28 alt2">
                                                                29</div>
                                                        <div class="line number30 index29 alt1">
                                                                30</div>
                                                        <div class="line number31 index30 alt2">
                                                                31</div>
                                                        <div class="line number32 index31 alt1">
                                                                32</div>
                                                        <div class="line number33 index32 alt2">
                                                                33</div>
                                                        <div class="line number34 index33 alt1">
                                                                34</div>
                                                        <div class="line number35 index34 alt2">
                                                                35</div>
                                                        <div class="line number36 index35 alt1">
                                                                36</div>
                                                        <div class="line number37 index36 alt2">
                                                                37</div>
                                                        <div class="line number38 index37 alt1">
                                                                38</div>
                                                        <div class="line number39 index38 alt2">
                                                                39</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash preprocessor bold">#!/bin/bash</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="bash plain">array=</code><code class="bash string">'project1'</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="bash plain">array=</code><code class="bash string">'project2'</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="bash plain">array=</code><code class="bash string">'com/project3'</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="bash plain">array=</code><code class="bash string">'com/phase/project4'</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="bash plain">array=</code><code class="bash string">'project5'</code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="bash plain">array=</code><code class="bash string">'com/stor/sproject6'</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="bash plain">RELEASE=</code><code class="bash string">"/opt/devapps/nexus/sonatype-work/nexus/storage/release/"</code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                         </div>
                                                                <div class="line number10 index9 alt1">
                                                                        <code class="bash comments">#清空备份文件</code>
</div>
                                                                <div class="line number11 index10 alt2">
                                                                        <code class="bash plain">BACKUP=</code><code class="bash string">"/tmp/storage/"</code>
</div>
                                                                <div class="line number12 index11 alt1">
                                                                        <code class="bash functions">cd</code> <code class="bash plain">$BACKUP</code>
</div>
                                                                <div class="line number13 index12 alt2">
                                                                        <code class="bash keyword">if</code> <code class="bash plain">[ $? -</code><code class="bash keyword">eq</code> <code class="bash plain">0 ];</code>
</div>
                                                                <div class="line number14 index13 alt1">
                                                                        <code class="bash keyword">then</code>
</div>
                                                                <div class="line number15 index14 alt2">
                                                                        <code class="bash spaces"> </code><code class="bash functions">rm</code> <code class="bash plain">-rf *</code>
</div>
                                                                <div class="line number16 index15 alt1">
                                                                        <code class="bash keyword">fi</code>
</div>
                                                                <div class="line number17 index16 alt2">
                                                                         </div>
                                                                <div class="line number18 index17 alt1">
                                                                        <code class="bash comments">#清除超过5个文件之外最老的那些文件</code>
</div>
                                                                <div class="line number19 index18 alt2">
                                                                        <code class="bash keyword">for</code> <code class="bash plain">path </code><code class="bash keyword">in</code> <code class="bash plain">${array[@]};</code>
</div>
                                                                <div class="line number20 index19 alt1">
                                                                        <code class="bash keyword">do</code>
</div>
                                                                <div class="line number21 index20 alt2">
                                                                        <code class="bash spaces"> </code><code class="bash plain">releasepath=${RELEASE}${path}</code>
</div>
                                                                <div class="line number22 index21 alt1">
                                                                        <code class="bash spaces"> </code><code class="bash functions">cd</code> <code class="bash plain">$releasepath</code>
</div>
                                                                <div class="line number23 index22 alt2">
                                                                        <code class="bash spaces"> </code><code class="bash keyword">if</code> <code class="bash plain">[ $? -</code><code class="bash keyword">eq</code> <code class="bash plain">0 ];</code>
</div>
                                                                <div class="line number24 index23 alt1">
                                                                        <code class="bash spaces"> </code><code class="bash keyword">then</code>
</div>
                                                                <div class="line number25 index24 alt2">
                                                                        <code class="bash spaces">  </code><code class="bash functions">echo</code> <code class="bash plain">$releasepath</code>
</div>
                                                                <div class="line number26 index25 alt1">
                                                                        <code class="bash spaces">  </code><code class="bash functions">echo</code> <code class="bash string">"Contains file:"</code>
</div>
                                                                <div class="line number27 index26 alt2">
                                                                        <code class="bash spaces">  </code><code class="bash functions">echo</code> <code class="bash plain">*</code>
</div>
                                                                <div class="line number28 index27 alt1">
                                                                        <code class="bash spaces">  </code><code class="bash plain">num=`</code><code class="bash functions">ls</code> <code class="bash plain">-l | </code><code class="bash functions">grep</code> <code class="bash string">'^d'</code> <code class="bash plain">| </code><code class="bash functions">wc</code> <code class="bash plain">-l`;</code>
</div>
                                                                <div class="line number29 index28 alt2">
                                                                        <code class="bash spaces">  </code><code class="bash keyword">if</code> <code class="bash plain">[$num -gt 5 ];</code>
</div>
                                                                <div class="line number30 index29 alt1">
                                                                        <code class="bash spaces">  </code><code class="bash keyword">then</code>
</div>
                                                                <div class="line number31 index30 alt2">
                                                                        <code class="bash spaces">   </code><code class="bash plain">num=`</code><code class="bash functions">expr</code> <code class="bash plain">$num - 5`</code>
</div>
                                                                <div class="line number32 index31 alt1">
                                                                        <code class="bash spaces">   </code><code class="bash plain">clean=`</code><code class="bash functions">ls</code> <code class="bash plain">-</code><code class="bash functions">tr</code> <code class="bash plain">| </code><code class="bash functions">head</code> <code class="bash plain">-$num | </code><code class="bash functions">xargs</code><code class="bash plain">`</code>
</div>
                                                                <div class="line number33 index32 alt2">
                                                                        <code class="bash spaces">   </code><code class="bash functions">echo</code> <code class="bash string">"will delete file:"</code>
</div>
                                                                <div class="line number34 index33 alt1">
                                                                        <code class="bash spaces">   </code><code class="bash functions">echo</code> <code class="bash plain">${clean}</code>
</div>
                                                                <div class="line number35 index34 alt2">
                                                                        <code class="bash spaces">   </code><code class="bash comments">#把文件移动到备份文件夹更安全</code>
</div>
                                                                <div class="line number36 index35 alt1">
                                                                        <code class="bash spaces">   </code><code class="bash functions">ls</code> <code class="bash plain">-</code><code class="bash functions">tr</code> <code class="bash plain">| </code><code class="bash functions">head</code> <code class="bash plain">-$num | </code><code class="bash functions">xargs</code> <code class="bash plain">-i -n1 </code><code class="bash functions">mv</code> <code class="bash plain">{} $BACKUP</code>
</div>
                                                                <div class="line number37 index36 alt2">
                                                                        <code class="bash spaces">  </code><code class="bash keyword">fi</code>
</div>
                                                                <div class="line number38 index37 alt1">
                                                                        <code class="bash spaces"> </code><code class="bash keyword">fi</code>
</div>
                                                                <div class="line number39 index38 alt2">
                                                                        <code class="bash keyword">done</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <span><strong>自动化处理</strong></span></p>
<p>
        将上述脚本保存为removecode.sh,然后添加crontab。</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_921705">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash functions">crontab</code> <code class="bash plain">-e</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        添加如下一行,每月运行一次:</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_902877">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">0 0 1 * * </code><code class="bash plain">/opt/project/removecode</code><code class="bash plain">.sh &gt; </code><code class="bash plain">/opt/project/remove</code><code class="bash plain">.log 2&gt;&amp;1 &amp;</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <span><strong>总结</strong></span></p>
<p>
        以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。</p>
<p>
        原文链接:http://blog.csdn.net/jiangchao858/article/details/54024632</p>
頁: [1]
查看完整版本: linux实现自动删除最旧的几个文件详解