我有这段代码可以找到超过 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/中的相同结构
?
谢谢
最佳答案
恕我直言,要正确地做到这一点,这是一个非常重要的问题 - 至少对我来说 :)。如果更有经验的人发布更好的解决方案,我会很高兴。
脚本:(必须有一个 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
解释:
- 找到你想要移动的所有内容(先复制然后删除)并将其存储在 tmp 文件中(查找)
- 将 tmp 文件中的内容列表复制到新位置 (cpio)
- 最后删除旧文件和目录 - 基于 tmp 文件中的列表(同时...)
该脚本不处理符号链接(symbolic link)、fifo 文件等,并且会在删除目录时打印无数错误是旧的,但它们不是空的(包含新文件或子目录)
先试运行! :)
关于bash - 移动超过 7 天的文件/目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5963859/