rsync命令(可替代rm删除巨量文件)
标签搜索

rsync命令(可替代rm删除巨量文件)

mrui
2024-03-08 / 0 评论 / 101 阅读 / 正在检测是否收录...

当一个文件夹下面有海量的文件需要删除时,使用rm命令往往可能会遇到问题。
一个问题是删除速度慢,往往需要几分钟到几十分钟不等的时间才能完成操作;另一个问题是可能会有参数溢出的问题导致rm命令报错。
此时,可以使用rsync命令来执行删除操作,主要用到的参数是--delete。
比如,可以看到下面的例子中a文件夹下面有246803个文件。要删除这些文件,可以先建一个空文件夹b,然后用rsync命令让b文件夹与a文件夹进行同步。

ls | wc -l
246803
#rm命令报错
rm -f *
-bash: /usr/bin/rm: Argument list too long
#使用rsync命令
rsync -av --delete /tset/b/ /tset/a/
#使用一个空的文件夹与a同步,使用--delete参数删除只存在于目标目录、不存在于源目录的文件。
sent 43 bytes  received 3,676,572 bytes  294,129.20 bytes/sec
total size is 0  speedup is 0.00

rsync :同步:增量拷贝,只传输变化过的数据
命令参数详解
rsync [选项...] 源目录 目标目录

  • -n:测试同步过程,不做实际修改
  • --delete:删除目标文件夹内多余的文档
  • -a:归档模式,相当于-rlptgoD
  • -v:显示详细操作信息
  • -z:传输过程中启用压缩/解压
  • --exclude 排除文件
  • --include 用来指定必须同步的文件模式

    #同步时排除某些文件或目录
    rsync -av --exclude='*.txt' source/ destination
    rsync -av --exclude '*.txt' source/ destination
    #上面命令排除了所有 TXT 文件。
    #注意,rsync 会同步以“点”开头的隐藏文件,如果要排除隐藏文件,可以这样写--exclude=".*"。
    #如果要排除某个目录里面的所有文件,但不希望排除目录本身,可以写成下面这样:
    rsync -av --exclude 'dir1/*' source/ destination
    #多个排除模式,可以用多个--exclude参数
    rsync -av --exclude 'file1.txt' --exclude 'dir1/*' source/ destination
    rsync -av --exclude={'file1.txt','dir1/*'} source/ destination
    #如果排除模式很多,可以将它们写入一个文件,每个模式一行,然后用--exclude-from参数指定这个文件
    rsync -av --exclude-from='exclude-file.txt' source/ destination

    关于/的注意事项

  • 不加/,源目录source会被完整的复制到目标目录destination下面,形成/destination/source 这样的目录结构
  • 源目录source后面有/,则只是将source目录里面的内容完整的同步到destination目录下,而不同步source目录本身。

    rsync -a source destination
    #destination目录下会有一个source文件夹
    rsync -a source/ destination
    #destination目录下面会有source文件夹里面的内容,而没有source本身。

    其他rsync命令

#模拟同步操作,显示将要发生的更改,但不实际执行。
rsync --dry-run source_dir destination_dir
#限制带宽使用率,以 KB/s 为单位,在同步过程中限制带宽使用率为 500 KB/s
rsync --bwlimit=500 source_dir destination_dir
#允许在中断后重新传输,同时显示实时进度
rsync --progress --partial source_dir destination_dir
#仅同步小于 100KB 的文件
rsync -a --max-size='100K' source_dir destination_dir
#仅同步大于 1MB 的文件
rsync -a --min-size='1M' source_dir destination_dir
#只同步文件夹,忽略文件
rsync -a --include='*/' --exclude='*' source_dir destination_dir
#将同步过程信息记录到指定的日志文件中
rsync -avzP --log-file='log.txt' source_dir destination_dir
#排除所有的 .txt 文件,并在目标目录中删除已排除的文件
rsync -a --exclude='*.txt' --delete-excluded source_dir destination_dir



0

评论

博主关闭了当前页面的评论