2015-09-25 113 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 {} \; 

刪除它們。

相關問題