GNU/Linux >> Tutoriales Linux >  >> Linux

cp solo archivos, saltando directorios

Le sugiero que use rsync en lugar de cp, si puede, tiene la opción -m que excluirá las carpetas vacías, ejemplo:

rsync -am <origin> <destination>

Explicación del comando en ExplainShell.com

Estoy usando la opción -a porque hace una gran cantidad de buenas acciones predeterminadas, pero si lo desea, también puede usar la opción -r, que establecerá solo el modo recursivo.

[AÑADIR comentario]

No conozco una forma de hacer esto con cp, al menos la página de manual no muestra ninguna opción que lo haga por usted. Probablemente pueda hacer una solución más compleja usando el comando find para encontrar la lista de archivos/directorios para copiar y luego pasarla a cp, pero eso sería mucho más complicado que rsync. rsync es incluso bastante estándar en muchos linux


cp de hecho, no tiene una opción para obtener solo archivos, pero como dijo Berserck, puede usar find junto con cp . De hecho, esto es realmente sencillo:

# Copy only files
find /path/to/file -type f -execdir cp "{}" /dest/path ";"

O:

# Copy everything except directories
find /path/to/file -not -type d -execdir cp "{}" /dest/path ";"

Explicación

find es la herramienta que buscará los archivos que deseas. En la primera opción, configuramos -type f para devolver solo archivos normales. En la segunda opción, configuramos el -not -type d para obtener todo excepto directorios. find ejecuta los argumentos pasados ​​a -execdir reemplazando {} con una entrada de resultado a la vez y detiene el comando cuando ; se encuentra (; se debe escapar \; o ";" , o el shell podría expandirlo).

-execdir ejecutará el comando que tiene la carpeta del archivo como su "directorio de trabajo" y es preferible en lugar de -exec , verifique a continuación.

El -type documentación de opciones:

-tipo c

El archivo es de tipo c:

b:bloque (en búfer) especial

c:carácter (sin búfer) especial

d:directorio

p:tubería con nombre (FIFO)

f:archivo normal

l:enlace simbólico; esto nunca es cierto si la opción -L o la opción -follow están activas, a menos que se rompa el enlace simbólico. Si desea buscar enlaces simbólicos cuando -L está en vigor, utilice -xtype.

s:enchufe

D:puerta (Solaris)

El -not documentación de opciones:

! expr

Verdadero si expr es falso. Por lo general, este carácter también necesitará protección contra la interpretación del caparazón.

-no expr

Igual que ! expr, pero no compatible con POSIX.

El -execdir documentación de opciones:

-exec comando;

Ejecutar comando; verdadero si se devuelve el estado 0. Todos los siguientes argumentos para encontrar se toman como argumentos para el comando hasta que un argumento consiste en ';' se encuentra La cadena '{}' se reemplaza por el nombre del archivo actual que se procesa en todos los lugares en los que aparece en los argumentos del comando [...]. Es posible que sea necesario escapar de ambas construcciones (con un '\') o citarlas para protegerlas de la expansión del shell. El comando especificado se ejecuta una vez para cada archivo coincidente. El comando se ejecuta en el directorio de inicio. Existen problemas de seguridad inevitables relacionados con el uso de la acción -exec; debería usar la opción -execdir en su lugar.

-execdir comando;

Como -exec, pero el comando especificado se ejecuta desde el subdirectorio que contiene el archivo coincidente , que normalmente no es el directorio en el que comenzó a buscar. Este es un método mucho más seguro para invocar comandos, ya que evita condiciones de carrera durante la resolución de las rutas a los archivos coincidentes. [...] Si usa esta opción, debe asegurarse de que su variable de entorno $PATH no haga referencia a '.'; de lo contrario, un atacante puede ejecutar cualquier comando que desee dejando un archivo con el nombre apropiado en un directorio en el que ejecutará -execdir. Lo mismo se aplica a tener entradas en $PATH que estén vacías o que no sean nombres de directorio absolutos.

https://linux.die.net/man/1/find


Linux
  1. Copiar archivos y directorios en Linux

  2. ¿Comando para comprimir varios directorios en archivos zip individuales?

  3. Comando de Linux:¿Cómo 'buscar' solo archivos de texto?

  4. Eliminar solo archivos en el directorio en linux NO directorios

  5. El comando 'ls -d' no muestra directorios. ¿Hay alguna manera de hacer que 'ls' solo muestre directorios en lugar de archivos y directorios?

Cómo usar el comando cp para copiar archivos y directorios

Cómo cambiar el nombre de archivos y directorios en Ubuntu 20.04

4 formas de transferir archivos y directorios en Linux

Comando Stat:mostrar atributos de archivos y directorios

Cómo enumerar solo directorios en Linux

Comando ls en Linux/UNIX