如何在不复制终端中的特定文件或子目录的情况下复制目录?

如何在不复制终端中的特定文件或子目录的情况下复制目录?

我有一个目录 main_dir,其中包含许多文件和 3 个子目录(dir1、dir2 和 dir3)。我想在一个命令中将其复制到另一个位置而不复制 dir2。我搜索了 cp 手册,看看是否可以以某种方式做到这一点,但我没有找到答案。我唯一的解决方案是复制整个目录,然后在复制的位置删除 dir2。

cp -r main_dir ~/Documents/main_dir_copy
cd ~/Documents/main_dir_copy
rm -r dir2

有没有办法做到这一点,而不必复制 dir2 的所有内容然后将其删除?

答案1

在 bash 中,您可以使用扩展的 glob去实行否定。

鉴于

$ tree main_dir
main_dir
├── dir1
│   ├── other file
│   └── somefile
├── dir2
│   ├── other file
│   └── somefile
├── dir3
│   ├── other file
│   └── somefile
└── file

3 directories, 7 files

然后

shopt -s extglob
cp -r main_dir/!(dir2) main_dir_copy/

导致

$ tree main_dir_copy
main_dir_copy
├── dir1
│   ├── other file
│   └── somefile
├── dir3
│   ├── other file
│   └── somefile
└── file

2 directories, 5 files

请注意,由于这以递归方式复制内容main_dir(不包括给定的)而dir2不是main_dir其本身,目标目录main_dir_copy必须已经存在 - 如果不存在,则添加mkdir main_dir_copy到命令序列中。

也可以看看

相关内容