6 votos

¿Cómo puedo copiar un directorio sin copiar un archivo o subdirectorio específico en la terminal?

Tengo un directorio main_dir que contiene una gran cantidad de archivos y 3 subdirectorios (dir1 y dir2 y dir3). Quiero copiar a otra ubicación sin necesidad de copiar dir2 en un comando. He buscado en el cp manual para ver si esto se puede hacer de alguna manera, pero no encontré la respuesta. Mi única solución fue copiar todo el directorio y, a continuación, elimine dir2 en el copiado de ubicación.

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

Es allí una manera de hacer esto sin tener que copiar todo el contenido de dir2 y, a continuación, eliminarlo?

9voto

steeldriver Puntos 19092

En bash, puede utilizar una extendida glob para implementar la negación.

Dado

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

3 directories, 7 files

entonces

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

resultando en

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

2 directories, 5 files

Tenga en cuenta que desde esta copia recursivamente el contenido de main_dir (excluyendo el da dir2) en lugar de main_dir sí, el directorio de destino main_dir_copy ya debe existir - si no es así, agregue mkdir main_dir_copy a la secuencia de comandos.

Ver también

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: