Bir dizini uzak paylaşımla senkronize etmek için LaunchAgent tarafından çalışan bir komut dosyasına sahibim.
Bu senaryo oldukça basit, onu buraya dahil edeceğim, böylece hiç kimse senaryodan şüphelenmiyor.
#!/bin/bash
# Hjälpskript för att ta backup.
# Endast för Mac OS, kommandon som stat, date och nc har annat syntax
# på Linux.
# Av Stefan Midjich
# REDIGERA DEN HÄR SÖKVÄGEN
backupTarget='/Volumes/myuser'
# REDIGERA ENDAST HÄR UNDER OM DU VET VAD DU GÖR
destinationFormat="sync" # backar som standard till YYYY-MM kataloger, en för varje månad
rsyncPort=22 # som standard antar vi att rsync använder ssh på port 22
purge=0 # som standard rensas inget gammalt
purgeDate='-2m' # standard: idag minus 2 månader
hostPattern='^([^:]+):(\/?.*)' # matcha värdnamn och sökväg från backupTarget
# Avsluta direkt om mål-katalogen inte existerar
if [[ ! "$backupTarget" =~ $hostPattern && ! -d "$backupTarget" ]]; then
echo "Backup target looks like directory that is not found" 1>&2
exit 1;
elif [ -n "${BASH_REMATCH[1]}" ]; then
# Här har vi hittat vad som ser ut att vara ett värdnamn i backupTarget.
# Så vi ska kontrollera att värden går att kontakta.
remoteHost=${BASH_REMATCH[1]}
if ! nc -z -w 5 "$remoteHost" $rsyncPort >/dev/null 2>&1; then
echo "Can't connect to target host on port $rsyncPort" 1>&2
exit 1
fi
fi
# Ta backup av samtliga argument som är
# existerande kataloger.
for syncDir in $@; do
if [ -d "$syncDir" ]; then
# Lägg till --delete efter -a om rsync även ska radera i
# destinationskatalogen. Annars sparas allt gammalt som raderas i
# källkatalogen.
rsync --exclude 'Microsoft *' -aS "$syncDir" "${backupTarget}/$destinationFormat/"
fi
done
# Rensa allt som är äldre än purgeDate endast
# om purge är högre än 0.
if (($purge >= 1)); then
purgeTime=$(date -v"$purgeDate" '+%s')
for targetDir in "${backupTarget}/*"; do
lastModified=$(stat -f '%m' "$targetDir")
if (($lastModified < $purgeTime)); then rm -rf "$targetDir"; fi
done
fi
Ve içine kurulmuş olan bu LaunchAgent'tan başlatılır ~/Library/LaunchAgents
.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>org.myuser.syncDir</string>
<key>ProgramArguments</key>
<array>
<string>/Users/myuser/bin/syncDir.sh</string>
<string>/Users/myuser/Documents</string>
</array>
<key>WatchPaths</key>
<array>
<string>/Users/myuser/Documents</string>
<string>/Volumes</string>
</array>
</dict>
</plist>
Bu sistem bir süredir çalışıyor fakat kullanıcı Mavericks'e yükseldiğinden beri, senkronize edilmiş gizli bir özniteliğe sahip olan herhangi bir dosyayla ilgili sorun yaşıyorlar.
Böylece dosya düzenlenirken Finder'da görünür durumdadır, ancak paylaşıma eşitlendikten sonra paylaşımdaki gizli özniteliği alır ve paylaşımda Finder'da gezinirken artık görülemez.
Sadece kabuk kullanarak görülebilir, ayrıca ls -O
gizli özniteliğe sahip olduğunu gösterir.
Bir Windows PC kullanarak aynı SMB2 paylaşımına bağlanma Tüm dosyaları görebilirim, bu nedenle bu gizli özellik sadece Mavericks'tedir. Dosyaları daha da tuhaf olan bir Windows PC'den de kaldırabilirim.
Mavericks'te gizlenen dosyalar, Windows istemcisinde, üzerlerindeki gizli bayrağını ayarlayana ve hem Windows istemcisinde hem de Mavericks'te normale dönene kadar biraz farklı bir renge sahip olarak gösterilir.