2011-05-11 105 views
3

我有這樣的代碼,找出超過7天以上的文件/目錄,然後執行一個MV舊。但是我意識到我需要一個不同的目錄和文件命令。 -type也不支持fd - 手冊說它只支持一個字符。移動文件/目錄超過7天

find /mnt/third/bt/uploads/ -type f -mtime +7 -exec mv {} /mnt/third/bt/tmp/ \; 

如何顯示文件和目錄> 7D進入/mnt/third/bt/tmp/同時保持他們在/mnt/third/bt/uploads/具有相同的結構?

感謝

+0

「不過我知道我需要的目錄和文件不同的命令」現在,也許我沒有得到一些重要的東西在這裏,但爲什麼呢? mv語法對於目錄和文件是相同的。 – pyvi 2011-05-11 12:36:53

+2

如何處理包含新文件的舊目錄?包含舊文件的新目錄怎麼樣? – Random832 2011-05-11 13:33:44

回答

2

恕我直言,這是一個不平凡的問題做是正確的 - 至少對我來說:)。如果有更有經驗的人發佈更好的解決方案,我會很高興。

腳本:(必須有一個GNU找到,如果你的 「發現」 是GNU版本改變gfind找到)

FROMDIR="/mnt/third/bt/uploads" 
TODIR="/mnt/third/bt/tmp" 
tmp="/tmp/movelist.$$" 

cd "$FROMDIR" 
gfind . -depth -mtime +7 -printf "%Y %p\n" >$tmp 
sed 's/^. //' < $tmp | cpio --quiet -pdm "$TODIR" 

while read -r type name 
do 
    case $type in 
    f) rm "$name";; 
    d) rmdir "$name";; 
    esac 
done < $tmp 
#rm $tmp 

說明:

  • 找到你想要的一切什麼招(將先複製並刪除)並將其存儲在tmpfile中(查找)
  • 將tmpfile中的東西列表複製到新位置(cpio)
  • 最後刪除舊文件和目錄 - ba sed的名單上從TMPFILE(雖然...)

的腳本不處理符號鏈接,FIFO文件等,並會在刪除目錄什麼是舊打印zilion錯誤,但他們不是空的(包含新的文件或子目錄)

先運行! :)