在Linux系统中,复制文件和目录是最基础且高频的操作,主要通过cp
命令实现,结合不同选项可满足多样化需求,针对特殊场景(如远程复制、设备复制、大文件同步等),还可使用rsync
、dd
等工具,本文将详细说明Linux下的复制方法及常用技巧。
基础复制操作
复制文件
最简单的文件复制语法为cp 源文件 目标文件
,例如将test.txt
复制到backup.txt
:
cp test.txt backup.txt
若目标文件已存在,默认会覆盖;若目标路径不存在,则将源文件重命名为目标路径下的文件名(如cp test.txt dir/
,若dir
存在则将test.txt
复制到dir
中,若不存在则创建dir
文件,实际使用时需注意路径准确性)。
复制目录
复制目录需添加-r
(递归)或-R
选项,用于复制目录及其所有子目录和文件,例如复制dir1
到dir2
:
cp -r dir1 dir2
若需严格保留目录的权限、时间戳、所有者等属性,可使用-a
选项(相当于-dpR
的组合):
cp -a dir1 dir2
复制时的属性与行为控制
保留文件属性
使用-p
选项可保留源文件的权限、时间戳、所有者等属性(需配合-r
复制目录):
cp -pr dir1 dir2
交互式复制(避免误覆盖)
默认情况下,cp
会直接覆盖目标文件,若需在覆盖前提示确认,可添加-i
选项:
cp -i test.txt dir/
当目标文件存在时,终端会提示是否覆盖?
,输入y
确认,n
取消。
强制覆盖
若目标文件为只读且需强制覆盖,可使用-f
选项(优先级高于-i
):
cp -f test.txt dir/
仅复制更新文件
使用-u
选项时,仅当目标文件不存在或比源文件旧时才会复制,适合增量备份:
cp -u src_dir dest_dir
显示复制过程
添加-v
(verbose)选项可实时显示复制的文件名,便于调试或监控进度:
cp -rv dir1 dir2
批量与特殊场景复制
批量复制文件
结合通配符可批量复制特定类型的文件,例如复制所有.txt
文件到docs
目录:
cp *.txt docs/
复制到指定目录
若需将多个源文件复制到同一目标目录,直接列出所有源文件路径,目标路径放最后:
cp file1.txt file2.txt dir/
块设备复制(如硬盘、U盘)
使用dd
命令可复制块设备数据(如制作U盘镜像、克隆硬盘):
dd if=/dev/sdb of=/path/to/disk.img bs=4M status=progress
其中if
为输入设备(源),of
为输出文件(目标),bs
为块大小(4M
提升速度),status=progress
显示复制进度。
远程复制
通过rsync
命令可实现本地与远程主机间的文件复制,支持增量同步和断点续传:
rsync -avz local_dir user@remote:/path/to/dest/
-a
归档模式,-v
显示过程,-z
压缩传输;若需从远程复制到本地,只需交换if
和of
路径的位置。
cp
命令常用选项速查
选项 | 作用 | 示例 |
---|---|---|
-r, -R |
递归复制目录 | cp -r dir1 dir2 |
-p |
保留文件属性(权限、时间戳等) | cp -p file1 file2 |
-i |
覆盖前提示确认 | cp -i file1 dir/ |
-f |
强制覆盖(忽略不存在的文件) | cp -f file1 file2 |
-a |
归档模式(保留所有属性,相当于-dpR ) |
cp -a dir1 dir2 |
-u |
仅复制目标中不存在的或较旧的文件 | cp -u src_dir dest_dir |
-v |
显示详细复制过程 | cp -v file1 file2 |
-l |
创建硬链接而非复制文件 | cp -l file1 file2 |
相关问答FAQs
问题1:复制大文件时如何避免因网络中断或命令错误导致复制失败?
解答:使用rsync
命令的--partial
选项可保留部分复制文件,中断后可续传;或使用dd
命令配合status=progress
查看进度,例如rsync --partial --progress large_file user@remote:/path/to/dest/
,或dd if=large_file of=/path/to/dest bs=4M status=progress
,也可通过nohup
或tmux
/screen
工具在后台运行命令,避免终端关闭导致中断。
问题2:如何复制整个目录并排除其中的某个子目录或文件?
解答:使用rsync
的--exclude
选项可灵活排除指定文件或目录,例如复制src_dir
到dest_dir
并排除temp
子目录:rsync -av --exclude='temp' src_dir dest_dir/
;若需排除多个文件,可多次使用--exclude
,如--exclude='*.tmp' --exclude='log/'
,对于复杂场景,也可通过--exclude-from=/path/to/exclude_file
指定排除规则文件(每行一个规则)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/33442.html