Hur skapa mapp med shellscript? Eller ersätta mapp med annan mapp?

Tråden skapades och har fått 23 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • 2010-12-03 15:19

Jag vill helst kopiera och ersätta en eventuell befintlig mapp med shellscript. Alternativt radera mappen och sedan skapa en ny, men jag hittar inte hur man gör. De artiklar jag hittar i ämnet kräver med baskunskap än vad jag har.

  • Medlem
  • 2010-12-03 15:44
rm -r
cp -r

Jag skulle använda rsync, då får du en exakt kopia inklusive eventuella symlänkar och liknande som cp inte brukar ta med utan extra flaggor.

rsync -av källa mål
  • Medlem
  • 2010-12-03 21:31

Ok, vad är "liknande"? Nu är det jag kopierar visserligen sådant som jag har väldigt bra koll på, men lär mig något!

Rsync kopierar inte bara filernas innehåll utan ser även till att filattributen blir desamma, t. ex. tidstämpel och behörigheter. En sak som jag missade att nämna är att det inte tar bort filer som inte finns i källmappen från målet, om du vill att den även ska göra det får du lägga till --del. Var dock noga med att skriva rätt om du använder det med den flaggan, blir ganska fel om man skulle skriva fel mål.

  • Medlem
  • 2010-12-03 22:30

Följdfråga: hur kör jag ett annat skript, shell eller applescript, från ett shellscript?

Du kan starta ett annat script (eller vilket annat program för den delen också) genom att skriva sökvägen till det, antingen den fullständiga sökvägen eller den relativa. Den relativa sökvägen utgår dock från katalogen du kör från så vill man använda det och fortfarande kunna starta scriptet från valfri katalog lägger man in något i stil med cd "$(dirname "$0")" först för att låta scriptet byta till samma katalog som scriptet ligger i. Det gäller bara då scriptet körs och påverkar inte ditt ordinare skal.

Man kan starta ett AppleScript med hjälp av osascript, antingen genom att skriva osascript och filnamnet eller genom att lägga in #!/usr/bin/osascript i början på AppleScript-filen och starta det som vilket annat script som helst.

Även om man kan starta vanliga program genom att skriva ut sökvägen till dem kan man även gå via open. T. ex. open -a TextEdit foo.sh för att öppna foo.sh i TextEdit, eller bara open foo.sh för att låta LaunchServices lista ut vilket program som ska användas.

  • Medlem
  • 2010-12-21 10:54

Jag har testat lite med "rsync" nu eftersom "cp" verkar ge filen ett nytt modified time. Men "rsync -av " ger mig underliga fel med sökvägar med extratecken i. Det jag verkar vara intresserad av är "rsync -t ".
Exakt vad gör "-av "?

Nu har jag inte kollat i manualen men v är väl bara verbose? a tror jag är för archive, som en är kombination av massa olika switchar för att behålla all information som går mellan källan och destinationen.. Rätta mig om jag har fel

var medveten om att det finns vissa begränsningar när det gäller att köra applescript via osascript, t.ex. vad gäller användarinteraktivitet

  • Medlem
  • Jönköping
  • 2011-01-12 21:41

cp klarar också av att behålla tidstämpel och rättigheter bland annat med -p (preserve).
Annars kan man använda -a (archive direkt).

UNIX man pages : cp ()

Baron är du osäker på hur du skall använda ett kommando skriver du ex 'man cp' för informationen jag nyss länkade till.

  • Medlem
  • 2011-01-12 21:52

Tack, men jag använder nu rsync, stat och mkdir för mina syften.

  • Medlem
  • 2011-01-13 17:20

I ett annat sammanhang vill jag nu ersätta en mapp med allt innehåll, dvs målmappens befintliga innehåll ska inte spela någon roll, den ska alltid bestå av källmappens innehåll.

mv

en masssa tecken för att meddelandet ska bli tillräckligt långt ldfgkjdflgkjdf lgkjsdölfkjgsöd flkjgdlskfjgldskfjgldsfkjglksdjfg

  • Medlem
  • 2011-01-13 21:00

mv flyttar, jag vill kopiera och ersätta.

jamen cp då!

  • Medlem
  • 2011-01-13 22:02

cp ersätter bara det som finns i originalkatalogen. Filer som finns i målkatalogen rörs inte.
källa: volumes/filyta/mapp A/ med innhåll fil 1 och fil 2
mål: volumes/lokal disk/mapp A/ med befintligt innhåll fil 1, fil 2, och fil 3
cp volumes/filyta/mapp A/ volumes/lokal disk/mapp A/ ger att fil 1 och fil 2 ersätts och fil 3 ligger kvar.

rsync?

Exempel:

rsync -a --delete MappA/ MappB

Mapp A är källmapp.
Mapp B är målmapp.

Glöm inte / i slutet på mapp A.

  • Medlem
  • 2011-01-13 22:28

delete gjorde susen! (y)

  • Medlem
  • 2011-04-08 16:14

När jag kör

rsync -r -delete 

tycks det som att en massa data kopieras trots att filerna är identiska. Dvs gör jag det en gång ska det gå mycket fortare nästa gång, men det gör det inte.
Jag ser också i Aktivitetskontroll att det skyfflas en massa data.
Hur gör jag för att kopiera en mapp med innehåll men bara ersätta det som inte är "samma"? Alla filer som finns i målet men inte i källan ska raderas.

Du har inte -t med i kommandot (och delete ska ha två - före sig). rsync kollar om tid och storlek stämmer på filerna. Utan -t uppdateras inte filerna på servern med rätt tidsstämpel.

Personligen tycker jag att det är lättare med -a (archive), men det är kanske någon speciell anledning till att du inte vill använda det?

Det är käckt att lägga till -v (verbose) när man testar så får man lite mer info.

  • Medlem
  • 2011-04-08 16:57

Med -t händer ingenting.
edit: fel av mig. Det händer nånting. Verkar bra.

  • Medlem
  • 2011-04-08 16:53

Tack!
Jag kör --delete, men testade med -delete och glömde korrigera det när jag postade.
Varför påpekar du att "server" inte uppdateras? (Är det av vikt att just servern inte uppdateras?) Jag kopierar från en (Mac OS-)server till en klientdator.

Och varför använder du hellre -a ?

Med server menar jag destinationen (vilket brukar vara en filserver av nåt slag). Jag visste inte att du skulle kopiera tillbaka. Ursäkta om det var otydligt - jag var kanske lite luddig med terminologin.

Med -a kombineras en del växlar (se man sidan) vilket jag tycker har passat mina behov bra (det gäller växlar som styr symboliska länkar, filrättigheter osv). Det står mycket bra i man sidan.

1
Bevaka tråden