移动超过7天的文件/目录

时间:2011-05-11 12:00:23

标签: bash

我有这个代码来查找超过7天的文件/目录,然后执行一个MV。但是我意识到我需要一个不同的目录和文件命令。 -type也不支持fd - 手册说它只支持一个字符。

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

如何将文件和目录> 7d移动到/mnt/third/bt/tmp/,同时保持/mnt/third/bt/uploads/中的相同结构?

由于

2 个答案:

答案 0 :(得分: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)
  • 最后删除旧文件和dirs - 基于tmpfile中的列表(while ...)

脚本不处理符号链接,fifo文件等,并且会在删除目录中打印zilion错误是旧的,但它们不是空的(包含新文件或子目录)

DRY RUN first!:)

答案 1 :(得分:1)

如果要搜索文件和目录,请查找supports boolean operators