Skip to content

文件管理

文件管理是Linux系统中最基础也是最核心的操作之一。在Linux系统中,所有数据都以文件的形式存储和管理,因此掌握文件管理命令对于高效使用Linux系统至关重要。

本章节将详细介绍Linux系统中常用的文件管理命令,包括目录切换、文件复制、删除、移动、查找、统计等操作。通过学习这些命令,您将能够熟练地管理和操作Linux系统中的文件和目录,提高工作效率。

ls - 列出目录内容

命令简介

ls 是Linux/Unix系统中最基础且使用频率最高的命令之一,用于列出目录中的文件和子目录信息。支持显示文件属性(权限、所有者、大小等),并能通过参数控制显示格式和排序方式。

语法格式

bash
ls [选项] [文件/目录...]

选项

选项描述示例
-a显示所有文件(包括隐藏文件)ls -a ~
-l长格式显示(文件详情)ls -l /var/log
-h人类可读的文件大小(配合-l使用)ls -lh
-t按修改时间排序(最新优先)ls -lt
-r反向排序ls -lr
-R递归列出子目录内容ls -R /etc
--color彩色输出(自动区分文件类型)ls --color=auto
-S按文件大小排序ls -lS
-i显示inode编号ls -i

经典案例

bash
# 查看当前目录的隐藏文件(包括.和..)
ls -a

# 递归列出/var目录内容,显示文件详情和人类可读大小
ls -lhR /var

# 按修改时间倒序列出日志文件(最新修改的在前)
ls -lt /var/log/*.log

# 查看文件的inode信息(用于处理特殊文件名)
ls -i "奇怪 文件名.txt"

注意事项

  1. 默认不显示以点开头的隐藏文件(需加-a参数)
  2. 不同发行版的--color参数可能默认启用(可通过ls --color=never禁用)
  3. 处理含空格的文件名时建议用引号包裹:ls "my file.txt"
  4. 在脚本中使用ls解析文件名时存在风险(建议改用findfor循环)

pwd - 打印当前工作目录

命令简介

pwd(Print Working Directory)命令用于显示当前所在目录的绝对路径。这是一个简单但极其重要的命令,特别在复杂的目录结构中操作时,能帮助用户快速确认当前位置。

语法格式

bash
pwd [选项]

选项

选项描述示例
-L显示逻辑路径(默认)pwd -L
-P显示物理路径(解析符号链接)pwd -P

经典案例

bash
# 基本用法:显示当前目录
pwd
# 输出示例:/home/user/projects

# 在符号链接目录中使用物理路径显示
cd /var/mail  # 通常是/var/spool/mail的符号链接
pwd -P
# 输出示例:/var/spool/mail

注意事项

  1. 在脚本中使用时建议加上-P选项以避免符号链接导致的路径问题
  2. 当目录被删除但仍在其中时,某些系统可能显示已删除目录的路径
  3. cd命令配合使用可以快速记录和返回特定目录:
bash
SAVED_DIR=$(pwd)
cd /some/long/path
# ...执行操作...
cd "$SAVED_DIR"

cd - 切换工作目录

命令简介

cd(Change Directory)命令用于切换当前工作目录,是Linux/Unix系统中最基础且最常用的命令之一。通过改变工作目录,用户可以导航到不同的文件系统位置。

语法格式

bash
cd [选项] [目录]

选项

选项描述示例
(无)切换到用户主目录cd
-切换到前一个工作目录cd -
~切换到用户主目录cd ~
..切换到上级目录cd ..

经典案例

bash
# 切换到用户主目录
cd

# 切换到/etc目录
cd /etc

# 切换到相对路径的目录
cd ../other_directory

# 在前一个目录和当前目录之间切换
cd -
# 输出示例:/home/user/previous_directory

# 使用环境变量切换目录
cd $HOME/projects

# 切换到包含空格的特殊目录名
cd "My Documents"

注意事项

  1. 如果目录不存在,会显示错误信息:cd: no such file or directory: dirname
  2. 目录名包含特殊字符(如空格)时需要用引号包裹
  3. 在脚本中使用cd时建议检查返回值:
bash
cd /target/directory || exit 1
  1. 使用pushdpopd可以创建目录栈实现更灵活的目录切换

cp - 复制文件或目录

cp命令来自英文单词copy的缩写,中文译为“复制”,其功能是复制文件或目录。cp命令能够将一个或多个文件或目录复制到指定位置,亦常用于文件的备份工作。

语法格式

bash
cp [选项] 源文件 目标文件 
# 复制单个文件cp [选项] 源文件1 源文件2 ... 目标目录 
# 复制多个文件到目录cp [选项] -t 目标目录 源文件1 ... 
# 指定目标目录(批量复制)

选项

参数说明示例
-i交互模式(覆盖前询问)cp -i file.txt backup/
-f强制覆盖(不提示)cp -f file.txt /强制路径/
-r/-R递归复制目录及子内容cp -r dir1/ dir2/
-v显示详细操作信息cp -v *.log logs/
-a归档模式(保留权限、时间戳等)cp -a source/ backup/
-p保留文件属性(同归档模式)cp -p file.txt dest/
-u增量复制(仅更新新文件)cp -u *.csv latest/
-l创建硬链接(非复制文件)cp -l data.db backup.db
-s创建符号链接(软链接)cp -s /path/to/file link
-n不覆盖已存在文件cp -n *.txt safe_dir/
-t指定目标目录(批量操作)cp -t dest/ file1 file2

经典案例

bash
cp file1.txt file2.txt          # 文件到文件复制
cp *.jpg /target_dir/           # 批量复制到目录
cp -v /etc/*.conf ~/backup/     # 显示详细复制过程
cp -r source_dir/ dest_dir/     # 递归复制目录
cp -a /etc/ /backup/etc_full/   # 完整保留属性复制(包括隐藏文件)
cp --backup=numbered file.txt dest/  # 自动备份冲突文件(生成file.txt.~1~)
cp -u *.log /archive/         # 仅复制更新的日志文件
cp -l bigfile.dat backup/     # 创建硬链接节省空间
cp -r --exclude="*.tmp" src/ dst/  # 递归复制但排除临时文件

rm - 删除文件或目录

删除文件或目录

语法格式

bash
rm [选项] [文件或目录...]

选项

选项描述示例
-f强制删除,忽略不存在的文件和不提示rm -f file.txt
-i交互式删除,删除前询问确认rm -i file.txt
-r-R递归删除目录及其内容rm -r directory
-v显示删除的详细信息rm -v file.txt
-d删除空目录(类似 mkdir 命令)。rm -d directory
--preserve-root默认保护根目录 / ,防止误删(现代系统默认启用)。rm --preserve-root
--no-preserve-root危险!允许删除根目录(仅在特殊场景使用)。rm --no-preserve-root
--help显示帮助信息rm --help
--version显示版本信息rm --version

经典案例

bash
rm file.txt          # 删除单个文件
rm *.tmp             # 通配符删除临时文件
rm -v log_*.txt      # 显示删除的每个文件
rm -r old_project/   # 递归删除目录
rm -rf node_modules/ # 强制删除(无确认)
rm -I *.bak          # 批量删除但提示一次确认
rm -i important*     # 每个匹配文件都确认

注意事项

  1. 不可恢复性:Linux 没有回收站,删除后通常无法恢复

  2. 根目录保护:现代系统默认 --preserve-root 防止误删 /

  3. 符号链接行为:

    bash
    rm symlink       # 只删除链接本身
    rm -r symlink/   # 删除链接指向的内容(危险!)

☠️ 著名危险操作rm -rf /rm -rf * 在错误目录执行会导致灾难性后果

删除保护措施

  1. 设置 alias rm='rm -I'.bashrc
  2. 重要文件先 chattr +i 设置不可删除属性
  3. 使用 --one-file-system 防止跨文件系统删除
  4. 定期备份重要数据
  5. 建议管理员将 rm -rf / 等危险命令加入 sudoers 禁用列表。

mv - 移动或重命名文件

mv命令来自英文单词move的缩写,中文译为“移动”,其功能与英文含义相同,能够对文件进行剪切和重命名操作。

语法格式

bash
mv [选项] 源文件或目录 目标文件或目录mv [选项] 源文件1 源文件2 ... 目标目录

选项

选项描述示例
-i交互模式(覆盖前询问)mv -i file.txt newfile.txt
-f强制移动(不询问,直接覆盖)mv -f file.txt /backup/
-n不覆盖已存在的文件mv -n file.txt /backup/
-u仅当源文件比目标文件新时才移动mv -u file.txt /backup/
-v显示详细操作信息mv -v file.txt /backup/
--help显示帮助信息mv --help
--version显示版本信息mv --version

经典案例

bash
mv oldname.txt newname.txt      # 文件重命名
mv *.jpg /target_directory/     # 移动多个文件
mv old_dir/ new_dir/            # 目录重命名
mv dir1/ dir2/ dir3/ target/    # 移动多个目录
mv -i important.txt backup/     # 覆盖前确认
mv -n *.log logs/               # 跳过已存在文件
mv -b config.conf backup/       # 覆盖前创建备份(生成config.conf~)
mv -v {file1,file2,file3} destination/  # 显示移动过程
mv -S .bak -b old.c new.c       # 指定备份后缀(生成new.c.bak)
find . -name "*.tmp" -exec mv {} /tmp \; # 结合find移动文件、
mv -- -奇怪文件 正常文件名      # 处理特殊字符文件名
mv "$(date +%Y%m%d).log" archive/ # 使用日期变量

注意事项

  1. 跨文件系统移动实际是"复制+删除"操作

  2. 权限保留:移动后保留原文件属性(同分区)

  3. 符号链接行为

    bash
    mv symlink target/    # 移动链接本身
    mv symlink/ target/   # 移动链接指向内容(需-R)

find -搜索文件或目录

find 用于在指定目录及其子目录中搜索文件或目录,支持按名称、类型、大小、时间、权限等条件过滤,并能对结果执行操作(如删除、复制、执行命令等)。

语法格式

bash
find [搜索路径] [表达式] [操作]

选项

基础条件

选项说明示例
-name PATTERN按文件名匹配(区分大小写,支持通配符 * ? []find /home -name "*.txt"
-iname PATTERN按文件名匹配(不区分大小写)find /home -iname "readme*"
-type TYPE按类型过滤:f(文件)、d(目录)、l(符号链接)等find /var -type d
-path PATTERN按路径匹配(支持通配符,匹配完整路径)
-regex PATTERN按正则表达式匹配路径(需用 -regextype 指定类型,如 posix-extended

按时间过滤

选项说明示例
-mtime N按文件修改时间(N 天前,+N 表示超过 N 天,-N 表示 N 天内)find / -mtime -7
-atime N按文件访问时间
-ctime N按文件状态(如权限)修改时间
-mmin N按修改时间(分钟,+N/-N 同上)
-newer FILE比指定文件更新的文件

按大小过滤

选项说明示例
-size N[bcwkMG]按文件大小:N 为数值,单位可选
c(字节)、
k(KB)、
M(MB)等,
+N 表示大于,
-N 表示小于
find / -size +10M
-empty查找空目录find / -empty

按搜索深度

选项说明示例
-maxdepth N最多搜索N层如:-maxdepth 7find / -maxdepth 3 -name "*.conf"
-mindepth N从第N层开始搜索如-mindepth 3find / -mindepth 3 -name "*.conf"

按权限过滤

选项说明示例
-perm MODE精确匹配权限(如 -perm 644
-perm -MODE匹配至少包含指定权限(如 -perm -u=r 表示用户有读权限)
-perm /MODE匹配任意位权限(如 -perm /o=w 表示其他用户有写权限)
-user username匹配指定用户的文件如:-user wwwfind /home -user alice
-group groupname匹配指定组的文件如:group www
-nouser匹配没有属主的文件

逻辑操作符

选项说明
-and / -a逻辑与(默认)
-or / -o逻辑或
-not / !逻辑非
()分组条件(需转义为 $ ... $

执行操作

选项说明示例
-print打印结果(默认操作)
-delete删除匹配的文件/目录find /tmp -name "*.tmp" -delete
-exec COMMAND \;对结果执行命令({} 表示匹配项,\; 结束符)find . -name "*.log" -exec rm {} \;
-ok COMMAND \;交互式执行命令(需用户确认)
-print0输出以 \0 分隔(配合 xargs -0 处理含空格的文件名)

应用场景

1. 按名称搜索文件

bash
find /var/log -name "*.log"            # 搜索 /var/log 下所有 .log 文件
find ~ -iname "readme.md"              # 忽略大小写搜索用户主目录下的 README 文件

2. 按类型过滤

bash
find /etc -type d                      # 查找 /etc 下的所有目录
find . -type f -name "*.tmp"           # 查找当前目录下的 .tmp 文件

3. 按时间过滤

bash
find /backup -mtime +7                 # 查找 7 天前修改过的文件
find ~/Downloads -mmin -10             # 查找 10 分钟内修改过的文件
find . -newer reference.txt            # 比 reference.txt 更新的文件

4. 按大小过滤

bash
find /var -size +10M                   # 查找大于 10MB 的文件
find ~/ -size -100k                    # 查找小于 100KB 的文件

5. 按权限过滤

bash
find /usr/bin -perm 755                # 查找权限为 755 的文件
find . -perm -u=rwx                   # 查找用户有读、写、执行权限的文件

6. 组合条件

bash
# 查找当前目录下 7 天前修改的 .log 文件,且大小超过 1MB
find . -name "*.log" -mtime +7 -size +1M
# 查找用户主目录下的目录或 .jpg 文件
find ~ $ -type d -o -name "*.jpg" $

7. 执行操作

bash
# 删除所有 .tmp 文件
find /tmp -name "*.tmp" -delete
# 将找到的 .txt 文件复制到 backup 目录
find . -name "*.txt" -exec cp {} ~/backup \;
# 交互式删除旧日志文件
find /var/log -name "*.log" -mtime +30 -ok rm {} \;

8. 处理含空格或特殊字符的文件名

bash
find . -name "*.pdf" -print0 | xargs -0 -I {} mv {} ~/Documents

9. 排除特定目录

bash
find /path -name "*.log" -not -path "*/exclude_dir/*"

10. 限制搜索深度

bash
find /var -maxdepth 2 -name "*.conf"    # 仅搜索 /var 及其下一级子目录

11. 结合正则表达式

bash
find . -regextype posix-extended -regex ".*/(2023|2024)-[0-9]{2}.log"

12. 统计文件数量

bash
find /var/log -type f | wc -l           # 统计文件总数

注意事项

  1. 性能影响:在根目录 / 下运行 find 可能会消耗大量资源,建议指定具体路径。
  2. 权限问题:如果没有权限访问某些目录,find 会报错(可使用 2>/dev/null 忽略错误)。
  3. -exec 语法:必须以 \; 结尾,{} 表示匹配的文件名。
  4. 危险操作-delete-exec rm 会直接删除文件,务必确认条件正确!
  5. 通配符转义:使用 -name 时,通配符需用引号包裹(如 "*.txt")。

md5sum - 效验文件

md5sum 是 Linux/Unix 系统中用于计算和校验文件 MD5 哈希值的工具。MD5(Message-Digest Algorithm 5)是一种广泛使用的密码散列函数,可生成 128 位(16字节)哈希值,常用于验证文件完整性。

语法格式

bash
md5sum [选项] [文件...]

选项

选项作用
-b二进制模式读取文件
-c从文件中读取 MD5 校验值并验证
--tag生成 BSD 风格的校验值
-t文本模式读取文件(默认)
--quiet校验失败时不输出警告信息
--status不输出任何信息,通过返回状态码表示结果

经典案例

bash
md5sum file.txt						# 计算单个文件的 MD5 值
md5sum file.txt > checksum.md5		# 生成校验文件
md5sum -c checksum.md5				# 验证文件 输出:file.txt: OK

注意事项

  1. MD5 安全性
    • MD5 已被证明存在碰撞漏洞,不适用于安全敏感场景(如密码存储)。
    • 需要更高安全性时,应使用 sha256sumsha512sum
  2. 大文件处理
    • 计算大文件时可能耗时较长,但内存占用较低。
  3. 跨平台一致性
    • Windows 的 certutil -hashfile 和 macOS 的 md5 命令输出格式不同,需注意兼容性。
  4. 校验文件格式
    • 使用 -c 时,校验文件必须是 MD5值 文件名 格式(如 d41d8cd... file.txt)。
  5. 隐藏文件
    • 对隐藏文件(如 .bashrc)同样有效。

chattr - 更改文件属性

chattr 命令用于更改 Linux 文件系统上的文件属性,这些属性比标准文件权限(如 chmod 设置的权限)更底层。它常用于设置文件不可删除、不可修改等特殊属性,特别适合系统关键文件的保护。

语法格式

bash
chattr [选项] [+/-/=属性] 文件...

选项

选项描述示例
-R递归处理目录及其内容chattr -R +i /etc
-V显示详细的输出信息chattr -V +a file.txt
-f抑制大部分错误信息chattr -f +i file.txt

属性

属性描述示例
+a只能追加内容(不能修改已有内容)chattr +a logfile.log
+i不可修改(不能删除、重命名、修改内容、创建链接)chattr +i /etc/passwd
+A不更新文件的访问时间chattr +A database.db
+c文件会被自动压缩存储chattr +c largefile.iso
+u文件被删除后,内容仍可恢复chattr +u important.doc
-移除属性chattr -i protected.sh

经典案例

bash
# 保护关键系统文件不被修改
sudo chattr +i /etc/passwd /etc/shadow /etc/group

# 允许日志文件只能追加内容
chattr +a /var/log/syslog

# 递归设置目录下所有文件不可修改
chattr -R +i /etc/nginx/

# 查看文件属性(使用 lsattr)
lsattr /etc/passwd

# 移除文件的不可修改属性
chattr -i /etc/resolv.conf

注意事项

  1. 大多数 chattr 操作需要 root 权限
  2. 即使 root 用户也无法修改设置了 +i 属性的文件
  3. 某些属性(如 +c 压缩)只在特定文件系统(如 ext2/ext3/ext4)上有效
  4. 使用 -R 递归选项时要特别小心,可能会意外锁定整个目录树
  5. lsattr 命令用于查看当前设置的属性

lsattr - 列出文件属性

lsattr 命令用于显示 Linux 文件系统上的文件扩展属性,这些属性是比标准文件权限更底层的控制标志。它通常与 chattr 命令配合使用,用于查看文件是否被设置为不可删除、不可修改等特殊状态。

语法格式

bash
lsattr [选项] [文件...]

选项

选项描述示例
-R递归列出目录及其内容的属性lsattr -R /etc
-d显示目录本身的属性lsattr -d /var/log
-a显示所有文件包括隐藏文件lsattr -a ~
-v显示文件版本/生成号lsattr -v /bin/bash
-p以数字形式显示属性lsattr -p /etc/passwd

属性标志说明

标志含义
a只能追加内容(append only)
A不更新访问时间(no atime updates)
c压缩存储(compressed)
d不进行 dump 备份(no dump)
e使用 extents 格式存储(extent format)
i不可修改(immutable)
j数据日志(data journaling)
s安全删除(secure deletion)
t禁用 tail-merging(no tail-merging)
u可恢复删除(undeletable)

经典案例

bash
# 查看关键系统文件的属性
sudo lsattr /etc/passwd /etc/shadow

# 递归查看目录下所有文件的属性
lsattr -R /etc/nginx/

# 查看目录本身的属性(而非内容)
lsattr -d /var/log

# 查看隐藏文件的属性
lsattr -a ~

# 结合 grep 查找被锁定的文件
lsattr -R / | grep "\----i-------"

注意事项

  1. 需要 root 权限才能查看某些系统文件的完整属性
  2. 属性标志 - 表示该属性未设置
  3. 某些属性只在特定文件系统(如 ext2/ext3/ext4)上有效
  4. 在递归模式(-R)下可能会显示大量输出,建议重定向到文件
  5. 属性标志的顺序和位置不影响其含义

inotifywait - 监控文件系统事件

简介

inotifywait 是 Linux 下基于 inotify 机制的文件系统监控工具,属于 inotify-tools 软件包的一部分。它可以阻塞式地等待文件系统事件(如文件创建、修改、删除等),非常适合用于编写自动化脚本。

语法格式

bash
inotifywait [-hcmrq] [-e <event>] [-t <seconds>] [--format <fmt>] [--timefmt <fmt>] <file> [<file> ...]

选项

选项描述示例
-h显示帮助信息inotifywait -h
-m持续监控模式(不退出)inotifywait -m /tmp
-r递归监控目录inotifywait -r /var/log
-q减少冗余输出inotifywait -q /home
-e <event>指定监控的事件类型inotifywait -e create,delete /tmp
-t <seconds>设置超时时间(秒)inotifywait -t 60 /opt
--format <fmt>自定义输出格式inotifywait --format '%T %w%f' /tmp
--timefmt <fmt>设置时间格式inotifywait --timefmt '%Y-%m-%d' /tmp
--exclude <pattern>大小写敏感的正则表达式排除模式inotifywait -r --exclude '^/tmp/backup' /tmp
--excludei <pattern>大小写不敏感的正则表达式排除模式inotifywait -r --excludei '\.log$' /var
--fromfile <file>从文件读取排除模式(每行一个)inotifywait -r --fromfile exclude_list.txt /data

--format占位符

占位符描述示例输出
%w监控的目录路径/tmp
%f触发事件的文件名(目录事件为空)test.log
%e事件类型(多个事件用逗号分隔)CREATE,MODIFY
%T当前时间(需配合--timefmt使用)2025-06-12 14:30:00

--timefmt占位符

参数说明示例输出
%Y4位年份2025
%y2位年份25
%m月份(01-12)06
%d日期(01-31)13
%H小时(00-23)15
%M分钟(00-59)30
%S秒(00-59)45
%A星期全称Friday
%a星期缩写Fri
%B月份全称June
%b月份缩写Jun
%F等价于 %Y-%m-%d2025-06-13
%T等价于 %H:%M:%S15:30:45
%Z时区CST
%z时区偏移+0800
%sUnix时间戳(秒)176543210
%N纳秒(需高精度支持)123456789

-e <event>事件

事件名称描述
access文件或目录被读取
modify文件内容被修改(目录的修改时间变化)
attrib文件或目录的元数据(权限、所有者、时间戳等)被修改
move文件或目录被移动(源目录触发)
move_to文件或目录被移动到监控目录(目标目录触发)
create在监控目录内创建新文件或子目录
open文件或目录被打开
close文件或目录被关闭(无论读写模式)
delete文件或目录被删除
umount包含监控项目的文件系统被卸载

经典案例

bash
# 监控/tmp目录下的文件创建和删除事件
inotifywait -m -e create,delete /tmp

# 递归监控网站目录的文件修改(用于触发自动部署)
inotifywait -mrq --format '%w%f' -e modify /var/www/html | while read file
do
    echo "文件已修改: $file"
    # 在此添加部署逻辑
done

# 带时间戳的监控输出
inotifywait -m --format '%T %w%f %e' --timefmt '%F %T' /data/logs

# 监控关键文件操作(创建/修改/删除/移动)
inotifywait -e create,modify,delete,move /important/files

# 监控权限变更和属性修改
inotifywait -e attrib /sensitive/data

# 递归监控/data但排除所有.git目录
inotifywait -mr --exclude '/\.git/' /data

# 监控网站目录但排除缓存和临时文件(不区分大小写)
inotifywait -mr --excludei '\.(sw[px]|tmp|bak)' /var/www

# 使用排除列表文件监控
echo -e "*.tmp\n*.bak\n/tmp/old/" > exclude.txt
inotifywait -mr --fromfile exclude.txt /home/user

注意事项

  1. 需要先安装 inotify-tools 包:sudo apt install inotify-tools(Debian/Ubuntu)
  2. 监控大量文件时可能触及系统默认的 inotify 限制,可通过修改 /proc/sys/fs/inotify/max_user_watches 调整
  3. 在 NFS 等网络文件系统上监控可能不可靠
  4. 使用 -m 持续监控模式时需配合管道或重定向使用,否则会持续输出到控制台
  5. 监控目录需要有读取权限

rsync - 远程文件同步工具

简介

rsync 是 Linux 下强大的文件同步工具,采用差异算法实现高效传输,支持本地和远程文件同步,能够只传输文件的变化部分,显著提高传输效率。

语法格式

bash
rsync [OPTION]... SRC [SRC]... DEST
rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
rsync [OPTION]... [USER@]HOST:SRC [DEST]

选项

选项描述示例
-a归档模式(相当于-rlptgoDrsync -a /src /dest
-v显示详细输出rsync -v file.txt backup:/backup
-z传输时压缩数据rsync -az /data server:/backup
-h人类可读格式输出rsync -ah /src /dest
-P显示进度并支持断点续传rsync -aP largefile user@host:/path
-e ssh指定远程shellrsync -e "ssh -p 2222" /src user@host:/dest
--delete删除目标端多余文件rsync -a --delete /src/ /dest/
--exclude=PATTERN排除匹配文件rsync -a --exclude='*.tmp' /src /dest
--bwlimit=KBPS限制带宽(KB/s)rsync --bwlimit=1000 /src server:/dest

经典案例

bash
# 本地目录同步(保留所有属性)
rsync -av /path/to/src/ /path/to/dest/

# 远程同步到本地(使用SSH加密)
rsync -azP user@remote:/path/to/src/ /local/dest/

# 同步时排除特定文件
rsync -av --exclude='*.log' --exclude='temp/' /src/ user@host:/dest/

# 镜像同步(完全一致)
rsync -a --delete /src/ /dest/

# 带宽限制同步(1MB/s)
rsync -av --bwlimit=1000 /largefiles/ backup:/storage/

注意事项

  1. 源目录结尾的/很重要:带/表示同步目录内容,不带/表示同步目录本身
  2. 首次同步大文件建议使用-P参数以便查看进度
  3. --delete操作会永久删除目标端文件,使用前建议先不加此参数测试
  4. 远程同步需要配置SSH免密登录以便自动化
  5. 可通过--dry-run参数模拟运行而不实际执行