假设有以下目录结构,需要把当前目录.
下所有文件及文件夹(dst
除外)复制到其子目录dst
文件夹下:
tree
.
├── dst
├── file1.txt
└── src
├── dir
│ └── file3.txt
└── file2.txt
不能直接使用cp -a . dst
:
cp: cannot copy a directory, ‘.’, into itself, ‘dst/.’
可行的一种方式:
ls | grep -v '^dst$' | xargs cp -at dst
# grep -v:正则匹配取反
# cp -t: --target-directory=dir 表示将所有参数指定的源目录/文件复制到目标目录下
# cp -a: --archive 等同于 cp -dR --preserve=all
执行结果:
tree
.
├── dst
│ ├── file1.txt
│ └── src
│ ├── dir
│ │ └── file3.txt
│ └── file2.txt
├── file1.txt
└── src
├── dir
│ └── file3.txt
└── file2.txt
如果当前目录下有.
开头的隐藏文件也需要复制,则要使用
ls -a | grep -v '^\(\.\{1,2\}\|dst\)$' | xargs cp -at dst
注:需要把当前目录.
和上级目录..
也排除