Bir dosyanın değiştirildiği/oluşturulduğu tarihi (Nautilus'ta veya ls -l komutu ile gösterilen) değiştirmenin bir yolu var mı? İdeal olarak, bir grup dosyanın tarih/zaman damgalarını belirli bir süre önce veya sonra (örneğin +8 saat veya -4 gün vb.) değiştirebilecek bir komut arıyorum.
Dosyanın sahibi (veya root) olduğunuz sürece, touch
komutunu kullanarak bir dosyanın değişiklik zamanını değiştirebilirsiniz:
touch filename
Varsayılan olarak bu, dosyanın değişiklik zamanını geçerli zamana ayarlayacaktır, ancak belirli bir tarihi seçmek için -d
bayrağı gibi bir dizi bayrak vardır. Örneğin, bir dosyayı günümüzden iki saat önce değiştirilmiş olarak ayarlamak için aşağıdakileri kullanabilirsiniz:
touch -d "2 hours ago" filename
Bunun yerine dosyayı mevcut değişiklik zamanına göre değiştirmek istiyorsanız, aşağıdakiler işinizi görecektir:
touch -d "$(date -R -r filename) - 2 hours" filename
Çok sayıda dosyayı değiştirmek istiyorsanız aşağıdakileri kullanabilirsiniz:
find DIRECTORY -print | while read filename; do
# do whatever you want with the file
touch -d "$(date -R -r "$filename") - 2 hours" "$filename"
done
Yalnızca ilgilendiğiniz dosyaları seçmek için argümanları find
olarak değiştirebilirsiniz. Yalnızca dosya değişiklik zamanlarını şimdiki zamana göre güncellemek istiyorsanız, bunu şu şekilde basitleştirebilirsiniz:
find DIRECTORY -exec touch -d "2 hours ago" {} +
Bu form dosya zamanı göreli versiyonu ile mümkün değildir çünkü touch
argümanlarını oluşturmak için kabuğu kullanır.
Oluşturma zamanına gelince, çoğu Linux dosya sistemi bu değeri takip etmez. Dosyalarla ilişkili bir ctime
vardır, ancak dosya metadatasının en son ne zaman değiştirildiğini izler. Eğer dosyanın izinleri hiç değiştirilmediyse, oluşturulma zamanını tutabilir, ancak bu bir tesadüftür. Dosya değişiklik zamanını açıkça değiştirmek bir metadata değişikliği olarak sayılır, bu nedenle ctime
ı güncellemenin yan etkisi de olacaktır.
Yardımın için teşekkürler. Bu benim işime yaradı:
Terminalde date-edit için dizine gidin. Sonra şunu yazın:
find -print | while read filename; do
# do whatever you want with the file
touch -t 201203101513 "$filename"
done
Enter tuşuna bastıktan sonra bir ">" göreceksiniz, son kez hariç -> "done".
Not: "201203101513" değiştirmek isteyebilirsiniz;
"201203101513" = bu dizindeki tüm dosyalar için istediğiniz tarihtir.