【shell一天一练】find命令、rsync命令

122 阅读2分钟

今日小练题目📢

有一个目录/data/att/,该目录下有数百个子目录, 比如/data/att/aming, /data/att/linux 然后再深入一层为以日期命名的目录,例如 /data/att/aming/20231009, 每天会生成一个日期新目录,由于/data所在磁盘快满了, 所以需要将老文件(一年以前的)挪到另外一个目录/data1/att下, 示例:mv /data/att/aming/20211001 /data1/att/aming/20211001 挪完之后,还需要做软链接, 示例:ln -s /data1/att/aming/20211001 /data/att/aming/20211001 写一个脚本,要求/data/att/下所有子目录都要按此操作, 脚本会每天01:00 执行一次,任务计划无需考虑,只需要写脚本即可 提醒:要确保老文件成功挪到/data1/att下之后才能做软链接,需要有日志

优秀作业🤌🏻

#!/bin/sh
#author:xYLiuuuuuu
#version:v1
#date:2024-11-17

main()
{
        cd /data/att
        for dir in `ls`
        do
                for dir2 in `find $dir -maxdepth 1 type d -mtime +365`
                do
                        rsync -aR $dir2/ /data1/att/
                        if [ $? -eq 0 ]
                        then
                                rm -rf $dir2
                                echo "/data/att/$dir2 移动成功"
                                ln -s /data1/att/$dir2 /data/att/$dir2 && \
                                        echo "/data/att/$dir2成功创建软连接"
                                echo
                        else
                                echo "/data/att/$dir 未移动成功"
                        fi
                done
        done
}

main &> /tmp/move_old_data_`date +%F`.log

敲黑板📝

  • find命令
-maxdepth 1 # 限制查找的深度为 1,即只在当前指定的目录下查找,不深入子目录
-type type # f普通文件、d目录、l符号链接
-mtime days:按修改时间查找,支持使用 `+` 或 `-` 表示在指定天数前或后,days 是一个整数表示天数。
-name pattern`:按文件名查找,支持使用通配符 `*` 和 `?`。
-size [+-]size[cwbkMG]:按文件大小查找,支持使用 `+` 或 `-` 表示大于或小于指定大小,单位可以是 `c`(字节)、`w`(字数)、`b`(块数)、`k`KB)、`M`MB)或 `G`GB)。

# 在当前目录下查找最近 20 天内状态发生改变的文件和目录
$ find . -ctime  20
  • rsync命令,用于同步文件,可代替cp+mv命令
# `-r`表示递归,即包含子目录。
$ rsync -r source1 destination
$ rsync -r source1 source2 destination


# `-a`参数可以替代`-r`,除了可以递归同步以外,还可以同步元信息(比如修改时间、权限等)
$ rsync -a source/ destination

# `-n`参数模拟命令执行的结果,并不真的执行命令。`-v`参数则是将结果输出到终端,这样就可以看到哪些内容会被同步。
$ rsync -anv source/ destination
  • 可以通过main函数的形式来方便定义脚本日志
  • 脚本某行很长的话,可以\来换行,但本质还是一行内容
  • &>:这是一个重定向操作符。它将标准输出(stdout)和标准错误输出(stderr)都重定向到指定的文件。