Linux 选择性文件复制

1. 问题描述

在Linux系统中,有时候需要将某个目录下的所有文件复制到另一个目录,但是又不想复制某些文件,比如不想复制隐藏文件,或者不想复制某些特定后缀的文件,这时候就需要用到Linux的选择性文件复制功能。

2. 解决方案

2.1. 复制所有文件,但不包括隐藏文件

cp -r /source/* /target

2.2. 复制所有文件,但不包括隐藏文件和指定后缀的文件

cp -r /source/*!(.txt|.doc) /target

2.3. 复制所有文件,但不包括隐藏文件和指定文件

cp -r /source/*!(.txt|file1) /target

2.4. 复制所有文件,但不包括隐藏文件和指定文件夹

cp -r /source/*!(.txt|dir1) /target

2.5. 复制所有文件,但不包括隐藏文件和指定文件夹下的所有文件

cp -r /source/*!(.txt|dir1/*) /target

2.6. 复制所有文件,但不包括隐藏文件和指定文件夹下的所有文件夹

cp -r /source/*!(.txt|dir1/*/) /target

2.7. 复制所有文件,但不包括隐藏文件和指定文件夹下的所有文件和文件夹

cp -r /source/*!(.txt|dir1/*|dir1/*/) /target

3. 复制文件夹下所有文件并排除特定大小的文件

find /source -type f -size +100M -exec cp {} /target \;
# 例如:
find ./ -type f -size -500M -exec cp -rf --parents {} /mnt/hybrid/ \;
# 该命令是找到小于500MB的文件,并强制复制到目标目录,复制时创建原文件的层级关系(保留文件夹的复制,若不加--parents会导致没有文件目录)