Posted by fwoeck
on Friday, April 24
Weil ich das jedes Mal wieder nachschlagen muss, schreib ich’s grad auf:
Wichtige Flags:
- v – verbose
- d – erzeugt Verzeichnisse beim Restore
- u – überschreibt bestehende Dateien
- a – liest die Timestamps beim Backup
- m – schreibt die Timestamps beim Restore
- p – copy-pass-Modus
Standardbenutzung
Ein Archiv erzeugen:
cd /quellverz
find . -depth -mtime -8 -print | cpio -ova > backup.cpio
und restaurieren:
cd /zielverz
cpio -ivdm < backup.cpio
(ACLs bleiben erhalten)
Copy-pass-Modus
Mit dem Copy-pass-Modus (p) lassen sich Files on-the-fly kopieren, ohne ein Archiv zu erzeugen. Z.B. hier, kopiere alle Dateien, deren Veränderungen jünger sind, als die der Datei ~/a_file.tm:
cd /quellverz
find . -depth -newer ~/a_file.tmp -print | cpio -pvduam /zielverz
Posted by fwoeck
on Wednesday, November 19
Der kleine Unterschied zwischen ActiveRecords find und find_by_id kann manchmal ein großer sein: find wirft eine Exception, falls die Ergebnismenge leer ist:
>> Project.unarchived.find(40)
ActiveRecord::RecordNotFound: Couldn't find Project with ID=40
...
>> Project.unarchived.find_by_id(40)
=> nil
Posted by fwoeck
on Monday, September 29
Wenn man auf der Kommandozeile sed benutzt, um in allen Dateien auf einmal Textstellen zu ersetzen, muss man die .svn-Pfade ausschließen, weil man sonst die lokale Arbeitskopie aus Sicht der Revisionierung unbrauchbar macht. Ein Workaround mit find und xargs lautet so:
find ./ -type f -name '*rb' | grep -v svn | grep -v vendor | grep -v lib |
xargs -iHIER sed -i 's/New \([a-zA-Z]+\)/\1 anlegen/g' HIER
Es besteht aber u.U. die Gefahr, Textstellen an unerwünschten Orten zu ersetzen. Am besten, man wählt die Quellordner einzeln aus:
find ./app -type f | grep -v svn |
xargs -iHIER sed -i 's/New \([a-zA-Z]+\)/\1 anlegen/g' HIER
Nachtrag: Es ist zu prüfen, ob dies auch auf git-Repos zutrifft.