我有一个目录 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
到命令序列中。
也可以看看