esto no funciona en caso de que sub / no esté vacío -> sub se copiará en sub nuevamente, a menos que eso sea lo que @Oguz quería.
Ok, finalmente estoy satisfecho con el findcódigo: D
Lekensteyn
2
Su segundo comando falla para los nombres de archivo que incluyen espacios. Use xargso -exec. No es necesario grep- uso ! -name "$TARGETDIR"o similar. Tienes citas inigualables $file. No creo que un recursivo cpfuncione como pretendes en cualquier otro que no sea tu primer comando.
Pausado hasta nuevo aviso.
Wohaa, se perdió una cita en los últimos códigos. Buen comentario Dennis, nunca pensé en usar -name en este caso :)
Lekensteyn
4
Supongamos que targetes el nombre del subdirectorio de destino, si su shell es bash:
shopt -s extglob
cp -r !(target) target/
En ksh, puedes hacerlo directamente cp -r !(target) target/.
En zsh, puedes hacer setopt ksh_globentonces cp -r !(target) target/. Otra posibilidad es setopt extended_globentonces cp -r ^target target/.
Sugeriría mover el directorio de destino fuera del directorio de origen y luego volverlo a colocar; mv es gratuito (si tiene cuidado de no moverse a un sistema de archivos diferente), a menos que espere que otros procesos interfieran / sean interferidos.
La mayoría de las soluciones publicadas anteriormente no funcionarán si hay espacios en los nombres de archivo. Sugeriría usar variantes de find -print0 | xargs -0 o find -exec, etc.
No hay necesidad de ls: for file in *. No hay necesidad de backticks - uso $(). No hay necesidad de backticks (o $()) alrededor del cpcomando (que producirá un mensaje de error).
Respuestas:
Si desea copiar el contenido de la carpeta de forma recursiva (arrojará 1 error, alternativas a continuación):
Un poco más hacky, pero funciona en subdirectorios no vacíos:
Otro oneliner:
O recursivo:
fuente
find
código: Dxargs
o-exec
. No es necesariogrep
- uso! -name "$TARGETDIR"
o similar. Tienes citas inigualables$file
. No creo que un recursivocp
funcione como pretendes en cualquier otro que no sea tu primer comando.Supongamos que
target
es el nombre del subdirectorio de destino, si su shell es bash:En ksh, puedes hacerlo directamente
cp -r !(target) target/
.En zsh, puedes hacer
setopt ksh_glob
entoncescp -r !(target) target/
. Otra posibilidad essetopt extended_glob
entoncescp -r ^target target/
.fuente
Sugeriría mover el directorio de destino fuera del directorio de origen y luego volverlo a colocar; mv es gratuito (si tiene cuidado de no moverse a un sistema de archivos diferente), a menos que espere que otros procesos interfieran / sean interferidos.
La mayoría de las soluciones publicadas anteriormente no funcionarán si hay espacios en los nombres de archivo. Sugeriría usar variantes de find -print0 | xargs -0 o find -exec, etc.
fuente
Funcionara para ti?
Si quisiera mover en lugar de copiar todo en el directorio actual a un subdirectorio, podría hacer lo siguiente:
fuente
Esto copiará todo, incluidos los archivos de puntos, y sin incluir el directorio de destino en sí, en el directorio de destino
SUBDIR
:fuente
Esto va en decir archivo dirCopy.sh
ejecútelo como "sh dirCopy.sh" en su consola
fuente
ls
:for file in *
. No hay necesidad de backticks - uso$()
. No hay necesidad de backticks (o$()
) alrededor delcp
comando (que producirá un mensaje de error).