Sida 1 av 1

Kommando för att rekursivt kopiera till en mapp

Postat: 14 jan 2016, 19:06
av Ainigma
Vad är det bästa kommandot om jag vill kopiera alla filer ( i detta fall pdf ) rekursivt i alla undermappar till en enda megamapp?

:)

Re: Kommando för att rekursivt kopiera till en mapp

Postat: 14 jan 2016, 20:53
av Gunnar Hjalmarsson
$ cp --help | grep recursively
-R, -r, --recursive copy directories recursively
$

Re: Kommando för att rekursivt kopiera till en mapp

Postat: 14 jan 2016, 21:49
av Ainigma
Ursäkta men jag förstår inte hur du menar. :P

Re: Kommando för att rekursivt kopiera till en mapp

Postat: 14 jan 2016, 22:07
av Gunnar Hjalmarsson
Det vanligaste kommandot för kopiering är cp. Om du kör kommandot

cp --help

så ser du instruktioner för hur kommandot kan användas, inklusive en lista med flaggor. Det är alltså flaggan -R (eller -r eller --recursive) som används när man vill kopiera rekursivt. (Mitt kommando ovan selekterar ut raden där det framgår.)

Re: Kommando för att rekursivt kopiera till en mapp

Postat: 14 jan 2016, 23:44
av Ainigma
Jag får inte till det. ??? Det jag vill göra är ju att bara kopiera av pdf filerna som ligger sorterade i olika mappar, till en enda mapp, inte kopiera av alltihop dvs mapparna som pdferna var sorterade i ska inte bli kopierade.

Re: Kommando för att rekursivt kopiera till en mapp

Postat: 15 jan 2016, 00:33
av Gunnar Hjalmarsson
Aha, då missförstod jag. Skulle tro att kommandot find är vad du söker; se

man find

Vet inte exakt vilka argument som behöver användas. Kanske kan du räkna ut det själv, eller så kanske någon annan hoppar in och hjälper till.

Re: Kommando för att rekursivt kopiera till en mapp

Postat: 15 jan 2016, 06:13
av Osprey
Prova med:

Kod: Markera allt

find FROM -type f -exec cp {} TO \;
Där FROM är startmappen du vill kopiera ifrån och TO är den du vill kopiera till. Givetvis bör TO inte ligga i FROM... ;)

Vill du t.ex kopiera från mappen "där du står" till en mapp som heter "pdf" i din hemmamapp, så kan du skriva:

Kod: Markera allt

find . -type f -exec cp {} ~/pdf \;
Dessa kommandon kopierar alla vanliga (type f) filer, men skulle du istället vilja ange det som alla filer som heter något med *.pdf, så kan du ange detta som:

Kod: Markera allt

find FROM -iname \*.pdf -exec cp {} TO \;
Detta kommando tar både *.pdf och *.PDF (och *.pDf etc.)...

Givetvis går det också bra att kombinera "-type" och "-iname" om man vill. Kommandot "find" är kraftfullt och kan göra massor... :)

Re: Kommando för att rekursivt kopiera till en mapp

Postat: 15 jan 2016, 18:21
av Ainigma
Tackar för all hjälp. Ska testa detta, återkommer med återkoppling. :)

Re: Kommando för att rekursivt kopiera till en mapp

Postat: 15 jan 2016, 21:42
av Ainigma
Ok hör kommer återkopplingen. Jag testade först detta:
find /home/andre/Dropbox/Dokument -iname \*.pdf -exec cp {} /home/andre/MegaMapp
Men då blev det ju tolkat som att allt skulle kopieras till en och samma fil så det blev ju fel. (intressant dock och se hur det visade sig).

Sedan skrev jag detta:
find /home/andre/Dropbox/Dokument -iname \*.pdf -exec cp {} ~/Test \;
Och det fungerade perfekt ;D . 11785 pdf in i den mappen. Som ni förstår hade det varit jobbigt att göra det manuellt. :P Men jag är lite oklar bara varför det senare helt korrekt skapade en mapp som allt kopierades till medan den förra kopierades till en fil. Det är någon detalj som jag inte greppat som säkert någon av er kan förklara: varför tolkas
~/Test
som att en mapp skapas där allt ska läggas i medan
/home/andre/MegaMapp
tolkas som att en fil ska skapas? ~ säger väl bara att det ska vara i hemkatalogen vilket det förra kommandot också gjorde?

Re: Kommando för att rekursivt kopiera till en mapp

Postat: 15 jan 2016, 21:55
av Osprey
Skillnaden består i just det att innan du kan kopiera till en mapp så måste du skapa den. Kommandot "cp" fungerar på precis samma sätt och om du skriver "cp foo bar" och "bar" inte finns innan, så skapar den en fil som heter "bar" och kopierar "foo" dit. Men om det å andra sidan redan finns en mapp som heter "bar", så kopierar den istället "foo" till den mappen...

Så antagligen hade du redan en mapp som hette ~/Test (alltså /home/andre/Test) i det andra försöket. I det första försöket så kopierade den förmodligen inte heller allt till samma fil, utan den gjorde om kopieringen för varje fil och det enda som låg där efteråt var den sista filen...

Re: Kommando för att rekursivt kopiera till en mapp

Postat: 15 jan 2016, 21:59
av Ainigma
Aha då förstår jag. Som du säger det fanns troligtvis redan en mapp som hette Test. Tack för all hjälp. :)

Re: Kommando för att rekursivt kopiera till en mapp

Postat: 15 jan 2016, 22:27
av Osprey
Här finns förresten en jätteviktig sak att tänka på också... Nu när vi kopierade filerna med "cp" så hände ju inget farligt, de låg hela tiden också kvar på sin ursprungliga plats - men, hade vi istället valt att flytta dem med "mv", så hade det första kommandot inneburit att alla filer förutom den sista hade försvunnit..... :o

Den hade alltså flyttat varje fil, för att sedan skriva över den med nästa och till slut hade bara den sista filen legat där...

Men som sagt, med "cp" hände inget farligt.... :)

Re: Kommando för att rekursivt kopiera till en mapp

Postat: 15 jan 2016, 22:29
av Ainigma
Ok!