如果数量超过七个,则从目录中删除最旧的文件

如果数量超过七个,则从目录中删除最旧的文件

每日下载的内容存储在一个目录中。

已创建一个脚本来计算此文件夹中驻留的文件数量。

我正在努力解决的部分是,如果文件数量超过七个,则删除目录中最旧的文件。

我应该如何进行?

# If I tared it up would the target exist
tar_file=$FTP_DIR/`basename $newest`.tar
if [-s "$tar_file" ]
then
    echo Files Found
else
    echo No files
fi

# tar it up
tar -cf tar_file.tar $newest

# how many tar files do I now have
fc=$(ls | wc -l)
echo $fc

# If more than 7 delete the oldest ones

答案1

我知道这是一个老问题。但降落在这里并分享以防其他人需要它。

#!/bin/bash
FTP_DIR=/var/lib/ftp # change to location of dir
FILESTOKEEP=7

ls -1t $FTP_DIR/*.tar | awk -v FILESTOKEEP=$FILESTOKEEP '{if (NR>FILESTOKEEP) print $0}' | xargs rm

基本上我在一列中列出所有文件,-1按修改时间排序,最新的在前-t

然后使用awkI 设置一个由 指定的文件数量的 var$FILESTOKEEP 并打印大于该数量的记录。

将结果传递给xargsrm在每行输出上运行的awk

如果未在保存文件的文件夹内调用脚本,这将起作用,因为使用通配符ls将强制打印扩展路径。

答案2

不确定您是否正在尝试删除 tar 文件或 $newest 文件。但对于单个目录中的一般文件:

ls -t1 $dir | tail -n +8 | while read filename; do rm "$filename"; done

如果 a) 文件少于 7 个且 b) 文件名中存在空格(换行符除外),则应注意这一点。

tail命令可以采用正数来从头开始获取最后几行。

答案3

代码

[vagrant@localhost ~]$ cat rm_gt_7_days
d=/tmp/test
fc=$(ls $d| wc -l)

if [ "$fc" -gt "7" ]; then
        find $d/* -mtime +7 -exec rm {} \;
fi

测试

目录和文件

mkdir /tmp/test && \
for f in `seq 7`; do touch /tmp/test/test${f}; done && \
touch -t 201203101513 /tmp/test/test8

概述

[vagrant@localhost /]$ ll /tmp/test
total 0
-rw-r--r--. 1 root root 0 Sep 14 12:47 test1
-rw-r--r--. 1 root root 0 Sep 14 12:47 test2
-rw-r--r--. 1 root root 0 Sep 14 12:47 test3
-rw-r--r--. 1 root root 0 Sep 14 12:47 test4
-rw-r--r--. 1 root root 0 Sep 14 12:47 test5
-rw-r--r--. 1 root root 0 Sep 14 12:47 test6
-rw-r--r--. 1 root root 0 Sep 14 12:47 test7
-rw-r--r--. 1 root root 0 Mar 10  2012 test8

脚本的执行和结果

[vagrant@localhost ~]$ sh rm_gt_7_days
[vagrant@localhost ~]$ ll /tmp/test
total 0
-rw-r--r--. 1 root root 0 Sep 14 12:47 test1
-rw-r--r--. 1 root root 0 Sep 14 12:47 test2
-rw-r--r--. 1 root root 0 Sep 14 12:47 test3
-rw-r--r--. 1 root root 0 Sep 14 12:47 test4
-rw-r--r--. 1 root root 0 Sep 14 12:47 test5
-rw-r--r--. 1 root root 0 Sep 14 12:47 test6
-rw-r--r--. 1 root root 0 Sep 14 12:47 test7

来源

  1. https://askubuntu.com/questions/62492/how-can-i-change-the-date-modified-created-of-a-file
  2. http://www.dreamsyssoft.com/unix-shell-scripting/ifelse-tutorial.php
  3. http://www.howtogeek.com/howto/ubuntu/delete-files-older-than-x-days-on-linux/
  4. http://www.cyberciti.biz/tips/how-to-generate-print-range-sequence-of-numbers.html

答案4

if [ $file_count -gt 7 ]
    rm `/bin/ls -rt | head -1`
fi

相关内容