Como pasar varias carpetas o archivos por comandos en la terminal

Iniciado por wilivarob, 13 Junio 2017, 19:06 PM

0 Miembros y 1 Visitante están viendo este tema.

wilivarob

Buenas a tod@s, tengo la siguiente duda y por mas que eh buscado por la red no encuentro lo que quiero hacer.

Tengo una usb donde hay varias carpetas y archivos, pero quiero pasar solo las carpetas, solo que son 13.

Se que se usa el comando "cp" (para copiar) y "mv" (para mover), ahora si quiero mover todas las carpetas o copiarlas tendria que hacer lo siguiente:

cp dir1 dir2 dir3 (para copiar)
mv dir1 dir2 dir3 (para mover)

Eh aqui el lio, son 13 carpetas y ya se pueden imaginar escribir "mv (y los 13 nombres de las carpetas), asi que en mi caso hay algo y las carpetas que quiero pasar estan enumeradas (1. Documentos, 2. Papeleria, 3. PDF, etc).

Encontre algo no me acuerdo exactamente si es asi, el lio es que me pasa todo hasta los archivos sueltos y solo quiero pasar las 13 carpetas....

mv /home/media/USB/* /home/wilivarob/Documentos (aqui tengo entendido que con el * me pasaria todo.

Teniendo en cuenta ya mi ejemplo, mi siguiente duda es como se haria si las carpetas no estuvieran enumeradas.

Por adelantado muchas gracias.

engel lex

mv /home/media/USB/* /home/wilivarob/Documentos

eso movería todo efectivamente.... pero

mv /home/media/USB/*/ /home/wilivarob/Documentos

observa el slash luego del asterisco, eso indica carpetas, solo moverá todas las carpetas, dajará los que no son carpetas en el directorio raíz del usb intactos
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

wilivarob

Cita de: engel lex en 13 Junio 2017, 20:58 PM
mv /home/media/USB/* /home/wilivarob/Documentos

eso movería todo efectivamente.... pero

mv /home/media/USB/*/ /home/wilivarob/Documentos

observa el slash luego del asterisco, eso indica carpetas, solo moverá todas las carpetas, dajará los que no son carpetas en el directorio raíz del usb intactos

Gracias colega por responder pero la duda ahora es la siguiente, teniendo en cuenta que funciona el comando me pasaria todas las carpetas, pero si no quiero pasar una carpeta como podria hacerlo, teniendo en cuenta el ejemplo que mencione, son 13 carpetas pero si solo quiero pasar 12???

engel lex

#3
y que factor excluiría a la 13va carpeta?

es decir, no estás siendo especifico, no es como si el comando sabe lo que piensas, yo tampoco...
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

wilivarob

Cita de: engel lex en 13 Junio 2017, 23:08 PM
y que factor excluiría a la 13va carpeta?....

Lo que quiero decir es que dado el caso que tuviera que pasar solo 12 carpetas como lo haría, o 10 carpetas.

Si el comando que me indicas pasaría todas las carpetas.

engel lex

ok, entiendo que solo quieres pasar una parte... pero repito, no estás siendo especifico


siendo 13 y quieres pasar 10, pueden ser 10 cualquiera? o tienen alguna característica? el codigo no puede leer tu mente, tienes que decidir una característica que las agrupe...

imaginate el siguiente caso...


en un escritorio hay 10 documentos y 13 carpetas llenas de papeles y te digo... "trae 12 carpetas, pero no traigas la equivocada" como decides?
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

wilivarob

Cita de: engel lex en 13 Junio 2017, 23:33 PM
ok, entiendo que solo quieres pasar una parte... pero repito, no estás siendo especifico.......

Exacto amigo ese es el hilo y teniendo en cuenta el ejemplo que mencione, como haría para pasar las carpetas del 1 al 12, como haria para pasar todas las carpetas sin la número 5.....

Ten en cuenta que en el ejemplo que doy mis 13 carpetas están enumeradas una carpeta la tengo con el nombre de "1. Documentos" otra "2. Papeleria", "3. Pdf", las 13 están enumeradas.


engel lex

#7
en este caso es mucho más complejo... como yo lo haría asumiendo que es la capeta cuyo nombre empieza por el numero 5
Código (bash) [Seleccionar]
ls -D /home/media/USB/ | grep -v -E "^5" | while read -r archivo; do mv "/home/media/USB/$archivo" /home/wilivarob/Documentos/; done

ojo que ahí estamos mezclando parametros, inversiones, ciclos y regex XD

pruebalo primero, lo estoy haciendo un poco de mente y no estoy seguro si la sintaxis está 100% bien
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

wilivarob

Cita de: engel lex en 14 Junio 2017, 00:08 AM
en este caso es mucho más complejo... como yo lo haría asumiendo que es la capeta cuyo nombre empieza por el numero 5.......

Wuauuu amigo ahora si que quede más perdido pero intento entender....

El código que envías haría pasar todas las carpetas excepto la 5, osea el código lo que hace es retener la carpeta 5 y mover el resto.

Podrías decirme que hace cada cosa, se que aunque no tenga idea que hace -D lo demás listaria las carpetas que hay en la USB, el "|", no estoy seguro pero creo que ejecuta algo como en segundo plano?, Por favor me gustaría saber quiero aprender....

Por otro lado donde dice "/home/media/USB/$archivo"  que haría ese "$archivo"

engel lex

el | sirve para pasar el standar output del lado izquierdo al standard input de la función de la derecha... basicamente toma la salida y la inyecta al siguiente

Código (bash) [Seleccionar]
ls -D /home/media/USB/

lista solo directorios en dicha carpeta

Código (bash) [Seleccionar]
grep -v -E "^5"

grep busca coincidencias, -v invierte lo conseguido, -E indica que vamos a usar REGEX extendido, ^5 indica "algo empezado por 5" en regex

Código (bash) [Seleccionar]
while read -r archivo; do

while es un ciclo, read es una función que permite por -r leer una entrada linea a linea y salvarla en la variable archivo

Código (bash) [Seleccionar]
mv "/home/media/USB/$archivo" /home/wilivarob/Documentos/

esto mueve de la primera ruta, usando la variable archivo como el nombre del archivo, a la segunda ruta

Código (bash) [Seleccionar]
; done

cierra el ciclo...

esto es aprender poco a poco bash y mezcla cosas que requieren ya algo de conocimiento en lenguajes de programación... por eso te decía que no era ta simple... tienes que aclararle a la pc que quieres excluir y al ser casos puntuales como el que pones, se empieza a volver extenso el asunto
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.