2012-11-29 90 views
1

我的shell腳本找到所有文件日期早90天的Linux find命令操作

find /var/www/html/zip/data/*/*/*/*/* -type f -mtime +90 

返回像

/var/www/html/zip/data/2011/jan/11/333333/Photos/a.jpeg 

/var/www/html/zip/data/2011/jan/11/333333/Photos/b.jpeg 

/var/www/html/zip/data/2011/jan/11/333333/Photos/c.jpeg 

/var/www/html/zip/data/2011/feb/11/333333/Photos/a.jpeg 

/var/www/html/zip/data/2011/feb/11/333333/Photos/b.jpeg 

我需要做的只是從上面獲取唯一的文件夾路徑是什麼輸出輸出使用相同的查找命令,所以輸出應該是

/var/www/html/zip/data/2011/jan/11/333333/Photos 

/var/www/html/zip/data/2011/feb/11/333333/Photos 

所以我相信會有需要t Ø追加在上面查找命令的東西,但不知道

注意什麼:我想保存的唯一路徑變量

回答

3

嘗試

find /var/www/html/zip/data/*/*/*/*/* -type f -mtime +90 -printf "%h\n" | sort | uniq 
+0

我不知道'-printf'有多廣泛,但我的系統似乎沒有它:( – NPE

+0

是否可以保存唯一的路徑導致一個變量使用上面的命令建議你? – neeraj

+0

當然,假設你正在使用bash: var = $(find/var/www/html/zip/data/*/*/*/*/* -type f -mtime +90 -printf「%h \ n」|排序| uniq的); echo「$ var」 – jonathanasdf

1

我不知道如果find可以直接做到這一點,但你總是可以使用sed進行後處理結果:

find /var/www/html/zip/data/*/*/*/*/* -type f -mtime +90 | sed 's|/[^/]*$||' 

通過uniq進一步管道中的結果應刪除重複項(您可能需要首先做sort,但我懷疑它)。

+0

我錯過了一件事,我也想保存變量中的獨特路徑 – neeraj

0

你可以找到解決這樣

find /var/www/html/zip/data -type d -mtime +90 | uniq 

這背後的想法是,只要一個文件夾中的文件被更新或修改的文件夾也被標記爲修改。因此,在這種情況下,你會得到所有這些並沒有在最近90天內更新的文件夾...

0

添加到jonathanasdf的回答,

你可能可以增加一個for循環,

$i=1; 
for uniq_dir in `find /var/www/html/zip/data/*/*/*/*/* -type f -mtime +90 -printf "%h\n" | sort | uniq`; 
do 
a[$i]=$uniq_dir; 
let "i = $i + 1"; 
done;