Как я могу скопировать каталог без копирования конкретного файла или подкаталога в терминале?

У меня есть каталог 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, а затем удаляя его?

6
задан 6 August 2019 в 13:06

1 ответ

В ударе можно использовать расширенный шарик для реализации отрицания.

Данный

$ 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 к последовательности команды.

См. также

9
ответ дан 23 November 2019 в 07:33

Другие вопросы по тегам:

Похожие вопросы: