copiere mai speciala

18 posts / 0 new
Last post
pigulici
copiere mai speciala

Ma intereseaza sa fac un script care sa: copie/mute primele 2 fisiere dintr-un anumit director in altul nou creat, dupa care sa ia urmatoare;e 2 fisiere din acelasi director sursa si sa le copie/mute in alt director nou creat, si tot asa pana se termina fisierele;se poate face asa ceva?

N3o
N3o's picture
Uite ceva "primitive" ce-mi

Uite ceva "primitive" ce-mi vin acum rapid in minte:

ls -1 | head -n 2 --- cu asta iti afiseaza primele 2 fisiere din directoru curent (unde ai dat comanda)

si apoi mai un pipe cu asta: while read line; do mv "$line" /cale/catre/director_destinatie; done

ls -1 | head -n 2 | while read line; do mv "$line" /cale/catre/director_destinatie; done

Traiasca sfantu pipe! :)

maaxx
maaxx's picture
Hai si cu varianta

Hai si cu varianta muncitoreasca :-))

[lucian@localhost tmp]$ mkdir pigulici
[lucian@localhost tmp]$ cd pigulici/
[lucian@localhost pigulici]$ mkdir dir1
[lucian@localhost pigulici]$ cd dir1/
[lucian@localhost dir1]$ ls
[lucian@localhost dir1]$ touch fisier{1,2,3,4,5,6}
[lucian@localhost dir1]$ ls
fisier1 fisier2 fisier3 fisier4 fisier5 fisier6
[lucian@localhost dir1]$ while [ "$(ls -A ".")" ]; do mkdir ../`ls -A|head -n 2|awk '{ ORS="_"; print; }'` && mv -v `ls -A|head -n 2|awk '{ ORS=" "; print; }'` ../`ls -A|head -n 2|awk '{ ORS="_"; print; }'`; done
`fisier1' -> `../fisier1_fisier2_/fisier1'
`fisier2' -> `../fisier1_fisier2_/fisier2'
`fisier3' -> `../fisier3_fisier4_/fisier3'
`fisier4' -> `../fisier3_fisier4_/fisier4'
`fisier5' -> `../fisier5_fisier6_/fisier5'
`fisier6' -> `../fisier5_fisier6_/fisier6'
[lucian@localhost dir1]$ ls
[lucian@localhost dir1]$ ls ../*
../dir1:

../fisier1_fisier2_:
fisier1 fisier2

../fisier3_fisier4_:
fisier3 fisier4

../fisier5_fisier6_:
fisier5 fisier6

Si'acu vine Csabi cu o linie de ruby si ne sparge pe toti. :)

' Zombie: "Thou canst not kill that which doth not live. But you can blast it into chunky kibbles." ' (Quake1 manual, chapter VI, section D, line 676)

maaxx
maaxx's picture
Pigulici, la varianta mea

Pigulici, la varianta mea posibil sa fie probleme daca ai fisiere cu spatii in nume, asa ca fii cu bagare de seama.

' Zombie: "Thou canst not kill that which doth not live. But you can blast it into chunky kibbles." ' (Quake1 manual, chapter VI, section D, line 676)

N3o
N3o's picture
@maaxx

Si'acu vine Csabi cu o linie de ruby si ne sparge pe toti. :)

ditto :))

Patkos Csaba
Exercitiu fain. Iata solutia.

Buna intrebare, tocmai ma plictiseam... iata o solutie la ce doresti tu, te rog sa o adaptezi la numele tale de foldere. In lipsa de mai multe informatii am improvizat un pic.

#!/bin/bash
source_dir="/home/csaba/tmp/test"
dest_dir="/tmp/dest"

cd $source_dir

i=1;
files="START"
while [ "$files" != "*" ]; do
    mkdir $dest_dir/$i
    echo * | awk '{print $1 "\n" $2}' | xargs -n1 -I {} mv {} -t $dest_dir/$i
    files=$(echo *)
    let "i++"
    echo $files
done

Csabi′s BLOG

Linux registered user # 457717

Patkos Csaba
2+1 randuri ruby...

@maxx & @n3o
Chiar m-am chinuit dar nu am reusit intr-un singur rand. Uite aici in 2 randuri + un require:
require 'fileutils'
allFiles=Dir.entries(ARGV[0]).sort_by{ |file| file}.collect{|file| file if !File.directory?(file)}.compact
allFiles.each{|file| puts allFiles.shift(2).each{|sourcefile| FileUtils.move ARGV[0]+"/"+sourcefile, '/tmp/dest'}}

Csabi′s BLOG

Linux registered user # 457717

maaxx
maaxx's picture
@Csabi: cool enough :)

@Csabi: cool enough :)

@pigulici: Un amic a dorit si el sa participe la exercitiu, http://pastie.org/4052891

' Zombie: "Thou canst not kill that which doth not live. But you can blast it into chunky kibbles." ' (Quake1 manual, chapter VI, section D, line 676)

N3o
N3o's picture
Hehe, e fain Ruby, btw, nu

Hehe, e fain Ruby, btw, nu puteai sa "califici" metodele din fileutils ceva de genu fileutils.Bla si atunci sa scapi de requires?

pigulici
Wow, cata coderi prin zona,

Wow, cata coderi prin zona, stiu su eu ceva cod(baza bazelor,pana la geniuchiul broastei...dar m-am impotmolit), idee e ca lucrez in grafica(muuult) si am un proiect la care trebuie sa aplic efecte diferite la fiecare 2 fisiere(pe care le-am lucrat deja), ca sa imi fie usor aplic pe directoare efectele, dar tre sa mut din directorul principalt cate 2 fisiere in cate un director separat, care este creat pe loc(fisierul 1 si 2 in dir 1, fisierul 3 si 4 in dir 2, samd), fisierle au nume de forma 50005-C21_1_big.jpg si sunt cateeva sute...luni voi testa ce mi s-a sugerat aici(atunci termin cu lucrul principal la ele) si revin cu feedback, multumesc in avans.

Patkos Csaba
@pigulici - doar sa-ti faci o

@pigulici - doar sa-ti faci o copie inainte la ele, nu cumva sa se piarda undeva.
@maaxx - e faina solutia amicului tau, dar listeaza cam de prea multe ori fisierele din folder. In fiecare ciclu de while se face un 'ls' si mai ai si un for in el cu 'find'. Daca ai sa zicem 2mii de fisiere acolo pe un HDD obisnuit, codul ala o sa macine mult si bine.

Csabi′s BLOG

Linux registered user # 457717

maaxx
maaxx's picture
@csabi - da, scripturile

@csabi - da, scripturile astea ale noastre nu sunt chiar cele mai optime.. :-)
Dincolo de performanta, lucrul care ma deranjeaza cel mai tare e ca m-am bazat pe "ls" si am fost de multe ori muscat de faza cu "ls, too many arguments", nici nu ai nevoie de prea multe fisiere ca sa-l dai pe spate pe "ls". Probabil un exemplu bazat numai pe "find" sa zicem ar fi mai cool.
Evident o solutie ca a ta nu ar suferi de problema asta... avantajul unui limbaj ca lumea. :)

@pigulici - grija mare totusi, fa teste pe o copie inainte.. sa nu ne injuri. :)

' Zombie: "Thou canst not kill that which doth not live. But you can blast it into chunky kibbles." ' (Quake1 manual, chapter VI, section D, line 676)

symbianflo
symbianflo's picture
D.lor

@ nuxulica si restul , cu parere de rau tre sa recunosc ,( avind in vedere ca nu suport ruby...) , dar solutia lui Csabi mi se pare cea mai eleganta... si char scriptul in bash nu-i zero ... vroiam sa ma arunc si eu dar dupa Csabi , orice scriptezi te faci de ochi maro :D


http://www.mandrivausers.ro/ MRB aint no shit , :p Linux user number 507107 Nu dați banii pe prostii, puneți Linux pe PISI ![ARLUG]

Unix is user-friendly. It’s just very selective about who its friends are

maaxx
maaxx's picture
Pai normal ca e mai eleganta,

Pai normal ca e mai eleganta, e facuta intr-un limbaj ca lumea. Ca la nivel de bash nici al lui nu e cine stie ce miss univers. :))

' Zombie: "Thou canst not kill that which doth not live. But you can blast it into chunky kibbles." ' (Quake1 manual, chapter VI, section D, line 676)

symbianflo
symbianflo's picture
te roade invidia HUH? auzi

te roade invidia HUH? auzi nuxulicu nu o fi miss univese dar fata de a ta??? hai recunoaste bosule , tu legat cu lanturi ( btw daca ai space in nume ce faci ? ) ,azotatul cu pipele ghghghghghgh vezi de ce nu ma bag .... asa crede lumea ca-s inteligent ghghghghgh


http://www.mandrivausers.ro/ MRB aint no shit , :p Linux user number 507107 Nu dați banii pe prostii, puneți Linux pe PISI ![ARLUG]

Unix is user-friendly. It’s just very selective about who its friends are

Patkos Csaba
Hehe, e fain Ruby, btw, nu

Hehe, e fain Ruby, btw, nu puteai sa "califici" metodele din fileutils ceva de genu fileutils.Bla si atunci sa scapi de requires?

Nu cred ca puteam. Fileutils, desi vine cu ruby nu este built-in, deci trebuie sa-l incluzi. Daca observi l-am folosit direct FileUtils.move...

Csabi′s BLOG

Linux registered user # 457717

pigulici
Am folosit bash-ul lui csaba

Am folosit bash-ul lui csaba , pt ca mai stiu oleaca de bash,in caz ca e nevoie de debug, a mers ok, problema a fost ca unele fisiere sunt afisate in alta ordine in win fata de linux si noroca ca mi s-a spus de spatii, lua eroare pt vreo 3 fisiere cu spatii in nume...multam tuturor si mai ales lu csaba.

Patkos Csaba
Sa cresti mare.

Sa cresti mare.

Csabi′s BLOG

Linux registered user # 457717