linux复制当前目录到其子目录下

假设有以下目录结构,需要把当前目录.下所有文件及文件夹(dst除外)复制到其子目录dst文件夹下:

1
2
3
4
5
6
7
8
tree
.
├── dst
├── file1.txt
└── src
├── dir
│ └── file3.txt
└── file2.txt

不能直接使用cp -a . dst

1
cp: cannot copy a directory, ‘.’, into itself, ‘dst/.’

可行的一种方式:

1
2
3
4
5
6
ls | grep -v '^dst$' | xargs cp -at dst

# grep -v:正则匹配取反
# cp -t: --target-directory=dir 表示将所有参数指定的源目录/文件复制到目标目录下
# cp -a: --archive 等同于 cp -dR --preserve=all

执行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
tree
.
├── dst
│ ├── file1.txt
│ └── src
│ ├── dir
│ │ └── file3.txt
│ └── file2.txt
├── file1.txt
└── src
├── dir
│ └── file3.txt
└── file2.txt

如果当前目录下有.开头的隐藏文件也需要复制,则要使用

1
ls -a | grep -v '^\(\.\{1,2\}\|dst\)$' | xargs cp -at dst

注:需要把当前目录.和上级目录..也排除