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

Cita de: engel lex en 14 Junio 2017, 01:06 AM
el | sirve para pasar el standar output del lado izquierdo al standard input de la función de la derecha.....

Me acaba de dejar sin palabras, tendré que tener en cuenta el comando ahora que llegue a casa y ponerlo a prueba, me habían recomendado instalar midnight commander, pero la verdad pensé que al hacerlo por comandos no fuera tan extenso y peor aún saber programación, pero bueno nunca es tarde para aprender.....

Muchas gracias amigo

engel lex

prueba por lo menos

imagina que tienes una carpeta done hay 5 archivos
ls
archivo1.x cosas.y hola1.x hola2.x hola3.x


si usas grep sin más argumentos te filtra de manera simple buscando cualquier coincidencia

ls | grep hola
hola1.x hola2.x hola3.x

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

#12
Cita de: engel lex en 14 Junio 2017, 01:24 AM
prueba por lo menos.....

Mi querido colega, te cuento que estoy muy sorprendido, eh echo lo del comando

cp -r /home/media/USB/*/

y efectivamente me paso todas las carpetas con sus archivos, pero me paso una carpeta que no queria que tiene el nombre de "Otros", asi que aplique la otra (aplique unos cambios menores, en vez de utilizar "mv" use "cp")...

ls -D /home/media/USB/ | grep -v -E "^Otros" | while read -r archivo; do cp -r "/home/media/USB/$archivo" /home/wilivarob/Documentos/; done

y vaya que si, solo que en este caso se pasaron archivos sueltos, creei que en esta sección

grep -v -E "^Otros"

añadiendole el nombre del archivo suelto que no queria que pasara funcionara

grep -v -E "^Otros" "^20170506.png"

pero salta error

"grep: ^20170506.png: No existe el fichero o el directorio"

Pero la verdad es lo que necesito, solo faltaria saber como ir añadiendo a ese comando lo que no quiero que pase.

NOTA: Eh estado haciendo unas pruebas y la unica que me funciono fue la siguiente, no se si exista algun metodo mas corto....

| grep -v -E "^Otros" | grep -v -E "^20170506.png" |

Ahora otra cosa que me quedo sonando y es que este comando

ls -D /home/media/USB/

la "-D", me deberia mostrar solo directorios (me imagino carpetas), y al aplicarlo me sale todo como si solo aplicara "ls", es como si "-D" no aplicara


engel lex

no grep debes pasarle un solo argumento, si pasas un segundo es un archivo a leer... y es harina de otro saco

me equivoqué en algo... era
ls -d

el principio, con d minúscula

si quisieras coincidir multiples reglas en regex usas por ejempl

grep -v -E "^Otros|^20170506\.png"

tienes que usar backslash para todo simbolo (como el punto y especialmente el punto, si no quieres caos) y usas barra para separar las reglas
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, 05:23 AM
no grep debes pasarle un solo argumento, si pasas un segundo es un archivo a leer... y es harina de otro saco.....

Bueno amigo acabo de hacer el proceso y te cuento lo siguiente, por un lado en cuanto a

ls -D a ls -d es que el primero muestra todo y el segundo solo aparece un punto (.), o sea no hace lo que mencionaste.

Y en cuanto el codigo

grep -v -E "^Otros|^20170506\.png" no se si te equivocaste pero le quite el "\" y lo unico que noto es que se tarda mas de lo que se demoro con el metodo que use yo...

engel lex

#15
disculpa... con ls -d tienes razón lo puse mal
ls -d /home/media/USB/*/

en este caso siempre debe llevar el */

sobre el \ si no lo colocas pasa que en regex el punto singifica "cualquier cosa" es decir

si buscas algo que empiece con c y termine con o y tenga cualquier cosa en el medio, usas

grep  -E "^c.*o$"

por eso debe llevar \


la sentencia correcta para sacar solo directorios exceptuando uno, debería ser

Código (bash) [Seleccionar]
ls -d /home/media/USB/*/ | grep -v -E "^Otros" | while read -r archivo; do cp -r "$archivo" /home/wilivarob/Documentos/; done

esta si la probé y creo que va 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, 06:21 AM
disculpa... con ls -d tienes razón lo puse mal.....

Como esta querido colega, acabo de verificar el ultimo codigo y te cuento lo siguiente, la primera parte ls -d /home/media/USB/*/ ahora si me muestra solo carpetas, al procesar todo el comando, los archivos sueltos no aparecen por ejemplo la imagen 20170506.png (esto debido a la primera parte de que solo muestre solo carpetas, hasta ahi todo perfecto), ahora en la parte grep -v -E "^Otros", se supone que indica que la carpeta "Otros" no deberia pasar, pues aqui es donde ya empieza el error porque me la pasa, incluso vi que modificaste esta parte do cp -r "$archivo" /home/wilivarob/Documentos/ le quitaste ""/home/media/USB/" que venia antes de "$archivo" y se lo puse a ver y nada aun....

Lo interesante es que el codigo pasa todas las carpetas sin los archivos sueltos y eso es bueno, pero y la carpeta "Otros" que no quiero???

engel lex

#17
grep -v -E "^Otros"

coincide todo lo que no empiece por otros... si la palabra "Otros" no es con lo que empieze el nombre de archivo,  quitale el  ^ te recomiendo por lo menos leer lo basico de regex


si quieres cambia la parte de
do cp -r "$archivo" /home/wilivarob/Documentos/

por
do echo "$archivo"

así ves que le está pasando al cp sin andar dando tumbos de ciego
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, 22:37 PM
grep -v -E "^Otros"

coincide todo lo que no empiece por otros...

Como estas colega, esta vez te escribo para agradecerte por el comando, esta vez funciono perfectamenta solo era quitar el "^" y solo poner el nombre de la carpeta, asi que muchas gracias, solo te menciono que qice ensañar sacando otra carpeta en este caso "Otros" y "5. Software" y en la parte

grep -v -E "^Otros"

Añadi como me lo mencionaste y enseñaste grep -v -E "^Otros" | "5. Software

y no funciono incluso puse

"^5"
"5\. Software"
"Software"
"^Software"
Casi todas las combinaciones posibles y siempre me saltaba un error de "bash"
solo me funciono asi grep -v -E "^Otros" | grep -v -E "5. Software"

De resto excelente exactamente era lo que necesitaba, muchas gracias y espero verte mas adelante, en estos dias publicare unos pequeños problemitas y espero en verdad me puedas ayudar a solucionarlo y pues nada muchas gracias.

engel lex

me cito

Citartienes que usar backslash para todo simbolo (como el punto y especialmente el punto, si no quieres caos) y usas barra para separar las reglas

el espacio es un simbolo (no es letra ni numero)

así que requiere backslash

usualmente se denomina por
\s

lee sobre regex y no des tumbos de ciego :¬¬ (me molesta personalmente)

grep -v -E "^Otros" | grep -v -E "5. Software"


te soy sincero y con este caso has tenido suerte XD pero solo sirve si excluyes... además el punto sustituyó el espacio...


regex en wikipedia tiene todo lo que necesites saber y mucho más

tambien esto te puede servir mucho
https://www.cheatography.com/davechild/cheat-sheets/regular-expressions/
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.