2016-04-11 9 views
1

Oluşturma tarihi yy-mm-dd ve Mac ve Ubuntu için gerçek tarih olarak yeniden adlandırmak için bir çözüm oluşturmak için arıyorum. AppleScript ile bir uygulama oluşturmayı ve saat başı olarak launchd ile nasıl arayacağımı biliyorum ve dosyalar, dosyanın başlangıcında oluşturma tarihine sahip olmayan depolama için repo'ya gönderildiğinde bir CRON işi kullanın.OSX'te oluşturma tarihine göre dosyalar nasıl yeniden adlandırılır?

for file in *.zip; do 
    mv -n "$file" "$(date +%Y%m%d_"$file")" 
done 

ama çalıştığınızda:

Ben bugünkü tarihe göre dosyaları yeniden

for f in *.zip; do 
    D=$(stat -n '%Y%m%d' $f) 
    mv -v "$f" "$D_$f" 
done 

hiçbir şey olmuyor. Dosyanın tarihini almak için stat foobar.zip kullanabiliyorum, ancak oluşturma tarihini uygulamak için bir tarih yoksa test etmek için koşulumu yazdığımda bunu oluşturma tarihi için yapabileceğimin bir yolu var mı? Biraz Ubuntu'da date -r yapabildiğimi hatırlıyorum ama bu Mac'te mevcut değil. SO, AskUbuntu ve Unix'i aradım ancak bunu yapma seçeneğine izin verecek bir çözüm bulamıyorum. D değişkenini ayarlamak için stat ve awk ile test etmeyi düşündüm ve bu şekilde yeniden adlandırın.

cevap

1
D=$(date -r $(stat -f %B $f) +%Y%m%d) 

$(...) bir komut çalıştırmak ve komut satırına çıktı ekleyecektir. Bunu iki kez yaparız: ilk stat -f %B $f, geçerli dosya ile değiştirilen $f ile yürütür; -f %B, "UNIX zaman damgası olarak" inode doğum zamanını "ifade eder. Bu, çıktı olarak 1440737362 gibi bir şey üretecektir; sonra bu değer sonraki katmana eklenir ve date -r 1440737362 +%Y%m%d yürütülür. Bu, UNIX zaman damgasını YYmmdd biçimine dönüştürecektir: 20150828. Bu, bir sonraki dış katmana tekrar eklenir ve D değişkenine insan tarafından okunabilir-ish ctime atar D=20150828 olsun.

DÜZENLEME: değişmiş %c (düğümü değişiklik zamanı) %B (inode doğum saati)

+0

ben istatistik 'almak Böyle bir dosya ya da öylesine directory' Bunu $ (stat -f% c $ f) olarak değiştirdim ve hiçbir şey olmuyor: foobar.zip -> foobar.zip'. Cevabınızda başkalarına yardım etmek için neler olup bittiğini açıklıyor musunuz? –

+0

Doğru, bu benim test dosyamdı, değiştirmeyi unuttum. Sadece mv'nizi mi değiştirdin? Yoksa iki ifadeyi de mi değiştirdin? Döngünün içine "echo $ D" koyarsanız, ne gösterir? – Amadan

+0

Evet 'echo $ D' çalıştırdığımda, bugünün tarihi. Dosyanın oluşturulma tarihi değil, bu durumda 2012-04-16. –

1

Komple Örnek

Amadan tarafından çözüm çok yararlı ve doğru tabii idi. Belki benim gibi, diğerleri bitmiş örneği arıyorlar. Ben bunu anladım ve şuna benzer:

tek satırlık:

for f in *.jpg; do D=$(date -r $(stat -f %B $f) +%Y-%m-%d-%H-%M-%S); mv "$f" "$D-$f"; done 

okunabilir versiyonu: Bir: istatistik:

for file in *.jpg 
    do VARIABLE_DATE_OF_FILE=$(date -r $(stat -f %B $file) +%Y-%m-%d-%H-%M-%S) 
    mv "$file" "$VARIABLE_DATE_OF_FILE-$file" 
done 
+0

Teşekkürler! Ayrıca büyük harf uzantıları '.JPG' için güncellemek zorunda kaldı – MichaelBrawn

İlgili konular