У меня есть каталог 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, а затем удаляя его?
В ударе можно использовать расширенный шарик для реализации отрицания.
Данный
$ 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
к последовательности команды.
См. также