2015-09-25 78 views
0

我是一个新手,脚本发EMAIL:[email protected],我需要一点点的shell脚本执行以下操作:shell脚本文件找到早于X天,并删除他们,如果他们没有在日志文件

  1. 找到所有.txt文件他们比X天的
  2. 删除他们,如果他们没有在日志文件中列出(TEXTFILES和gzip压缩TEXTFILES)

我知道的基本知识约find -mtimegrepzgrep等,但它是非常棘手我在一个工作scr得到这个IPT。

我想是这样的:

#! /bin/sh 
for file in $(find /test/ -iname '*.txt') 
    do 
    echo "$file" ls -l "$file" 
    echo $(grep $file /test/log/log1) 
done 
+0

到目前为止你做了什么,结果如何? –

+0

它尝试了这样的东西#!/bin/sh for $(find/test/-iname'* .txt');做 echo“$ file” ls -l“$ file” echo $(grep $ file/test/log/log1) done – Peter

回答

0
IFS=' 
' 
for i in `find /test/ -ctime +10`; do 
    grep -q $i log || echo $i # replace echo with rm if satisfied 
done 
  • 内部域分隔的情况下,用空格中 文件名。

  • /test/文件夹中查找所有超过10天的文件。

  • Greps path in log file。

0

我会用这样的:

#!/bin/bash 

# $1 is the number of days 

log_files=$(ls /var/log) 

files=$(find -iname "*.rb" -mtime -$1) 

for f in $files; do 
    found="false" 
    base=$(basename $f) 
    for logfile in $log_files; do 
    res=$(zgrep $base $logfile) 
    if [ "x$res" != "x" ]; then 
     found="true" 
     rm $f 
    fi 
    if [ "$found" = "true" ]; then 
     break 
    fi 
    done 
done 

,并称之为:

#> ./find_and_delete.sh 10 
0

你可以创建一个小的bash脚本,检查文件是否在日志或不:

$ cat ~/bin/checker.sh 
#!/usr/bin/env bash 
n=$(basename $1) 
grep -q $n $2 
$ chmod +x ~/bin/checker.sh 

然后用它作为单find命令:

$ find . -type f ! -exec ./checker.sh {} log \; -exec echo {} \; 

这应该只打印要删除的文件。一旦确信它做到了你想要的:

$ find . -type f ! -exec ./checker.sh {} log \; -exec rm {} \; 

删除它们。

相关问题