{"id":33466,"date":"2025-11-03T06:31:21","date_gmt":"2025-11-03T03:31:21","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/bugun-degisen-dosyalari-hizlica-bulan-python-scriptiyle-dosya-yukleme-rehberi\/"},"modified":"2025-11-03T06:31:21","modified_gmt":"2025-11-03T03:31:21","slug":"bugun-degisen-dosyalari-hizlica-bulan-python-scriptiyle-dosya-yukleme-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/bugun-degisen-dosyalari-hizlica-bulan-python-scriptiyle-dosya-yukleme-rehberi\/","title":{"rendered":"Bug\u00fcn De\u011fi\u015fen Dosyalar\u0131 H\u0131zl\u0131ca Bulan Python Scriptiyle Dosya Y\u00fckleme Rehberi"},"content":{"rendered":"<p><body><\/p>\n<p>G\u00fcnl\u00fck dosya y\u00f6netiminizde kar\u0131\u015f\u0131kl\u0131k m\u0131 ya\u015f\u0131yorsunuz? Web siteniz, raporlar\u0131n\u0131z veya log dosyalar\u0131n\u0131z i\u00e7in yaln\u0131zca bug\u00fcn de\u011fi\u015ftirilen dosyalar\u0131 bulmak ve otomatik y\u00fcklemek, verimlili\u011finizi \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir. Bu rehber, Python ile bu s\u00fcreci nas\u0131l otomatikle\u015ftirece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.<\/p>\n<p>Modern dijital d\u00fcnyada, i\u015fletmeler ve bireyler s\u00fcrekli olarak b\u00fcy\u00fck miktarda veri ve dosya ile \u00e7al\u0131\u015fmaktad\u0131r. Web sitelerinden mobil uygulamalara, sunucu loglar\u0131ndan finansal raporlara kadar her alanda dosyalar s\u00fcrekli olarak olu\u015fturulmakta, de\u011fi\u015ftirilmekte ve silinmektedir. Bu kadar dinamik bir ortamda, hangi dosyalar\u0131n g\u00fcncel oldu\u011funu, hangilerinin senkronize edilmesi gerekti\u011fini veya hangilerinin yedeklenmesi gerekti\u011fini manuel olarak takip etmek, hem zaman al\u0131c\u0131 hem de hata yapmaya olduk\u00e7a a\u00e7\u0131k bir s\u00fcre\u00e7tir. \u0130\u015fte bu noktada, yaln\u0131zca bug\u00fcn de\u011fi\u015ftirilen dosyalar\u0131 tespit etme yetene\u011fi, operasyonel verimlilik ve veri b\u00fct\u00fcnl\u00fc\u011f\u00fc a\u00e7\u0131s\u0131ndan kritik bir \u00f6nem kazanmaktad\u0131r.<\/p>\n<p>Manuel dosya y\u00fckleme ve senkronizasyon i\u015flemleri, beraberinde bir\u00e7ok riski getirir. Yanl\u0131\u015f bir dosyan\u0131n y\u00fcklenmesi, eski bir s\u00fcr\u00fcm\u00fcn \u00fczerine yaz\u0131lmas\u0131 veya \u00f6nemli bir dosyan\u0131n atlanmas\u0131, ciddi veri kayb\u0131na, hizmet kesintilerine veya g\u00fcvenlik a\u00e7\u0131klar\u0131na yol a\u00e7abilir. \u00d6rne\u011fin, bir web sitesinin i\u00e7eri\u011fini g\u00fcncellerken, yanl\u0131\u015fl\u0131kla eski bir CSS veya JavaScript dosyas\u0131n\u0131 y\u00fcklemek, sitenin bozuk g\u00f6r\u00fcnmesine neden olabilir. Ya da, g\u00fcnl\u00fck olarak olu\u015fturulan sunucu loglar\u0131n\u0131 yedeklerken, bir g\u00fcn\u00fcn log dosyas\u0131n\u0131 g\u00f6zden ka\u00e7\u0131rmak, kritik hata ay\u0131klama bilgilerinin kayb\u0131na yol a\u00e7abilir. Bu t\u00fcr senaryolar, otomatik ve ak\u0131ll\u0131 dosya y\u00f6netim sistemlerinin neden bu kadar de\u011ferli oldu\u011funu a\u00e7\u0131k\u00e7a g\u00f6stermektedir. Python gibi g\u00fc\u00e7l\u00fc bir programlama diliyle, bu t\u00fcr zorluklar\u0131n \u00fcstesinden gelmek ve karma\u015f\u0131k s\u00fcre\u00e7leri basitle\u015ftirmek olduk\u00e7a kolayd\u0131r. Otomasyon, insan hatas\u0131n\u0131 minimize eder, tekrarlayan g\u00f6revler i\u00e7in harcanan zaman\u0131 serbest b\u0131rak\u0131r ve genel olarak daha g\u00fcvenilir bir i\u015f ak\u0131\u015f\u0131 sa\u011flar.<\/p>\n<p>Ayr\u0131ca, b\u00fcy\u00fck dosya koleksiyonlar\u0131nda de\u011fi\u015fiklikleri takip etmek, disk alan\u0131 y\u00f6netimi ve a\u011f bant geni\u015fli\u011fi kullan\u0131m\u0131 a\u00e7\u0131s\u0131ndan da \u00f6nemlidir. Her g\u00fcn y\u00fczlerce veya binlerce dosyan\u0131n bulundu\u011fu bir sistemde, t\u00fcm dosyalar\u0131 yeniden y\u00fcklemek yerine sadece de\u011fi\u015fenleri y\u00fcklemek, hem sunucu kaynaklar\u0131n\u0131 korur hem de y\u00fckleme s\u00fcresini k\u0131salt\u0131r. Bu, \u00f6zellikle s\u0131n\u0131rl\u0131 bant geni\u015fli\u011fine sahip ortamlarda veya s\u0131k s\u0131k g\u00fcncellemelerin yap\u0131ld\u0131\u011f\u0131 senaryolarda b\u00fcy\u00fck avantaj sa\u011flar. Bu makalede ele alaca\u011f\u0131m\u0131z Python scripti, tam da bu ihtiyaca y\u00f6nelik pratik ve etkili bir \u00e7\u00f6z\u00fcm sunarak, dosya y\u00f6netimi s\u00fcre\u00e7lerinizi optimize etmenize yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h2>Temel Kavramlar: Dosya Modifikasyon Tarihi ve Python&#8217;\u0131n G\u00fcc\u00fc<\/h2>\n<p>Bug\u00fcn de\u011fi\u015ftirilen dosyalar\u0131 bulma i\u015flevselli\u011finin temelini olu\u015fturan en \u00f6nemli kavramlardan biri, dosyan\u0131n <strong>modifikasyon tarihi<\/strong> veya k\u0131saca <strong>mtime<\/strong>&#8216;d\u0131r. Her dosya, i\u015fletim sistemi taraf\u0131ndan izlenen \u00e7e\u015fitli zaman damgalar\u0131na sahiptir. Bunlar aras\u0131nda olu\u015fturulma tarihi (creation time), son eri\u015fim tarihi (access time) ve son de\u011fi\u015ftirilme tarihi (modification time) bulunur. Bizim senaryomuz i\u00e7in en kritik olan\u0131, bir dosyan\u0131n i\u00e7eri\u011finin en son ne zaman de\u011fi\u015ftirildi\u011fini g\u00f6steren modifikasyon tarihidir. Bu tarih, dosyan\u0131n veri bloklar\u0131nda yap\u0131lan son de\u011fi\u015fikli\u011fi yans\u0131t\u0131r ve genellikle bir zaman damgas\u0131 (timestamp) olarak saklan\u0131r.<\/p>\n<p>Python, dosya sistemiyle etkile\u015fime girmek i\u00e7in olduk\u00e7a g\u00fc\u00e7l\u00fc ve esnek ara\u00e7lar sunar. Bu ara\u00e7lar\u0131n ba\u015f\u0131nda, i\u015fletim sistemi ile ilgili i\u015flevleri sa\u011flayan <code>os<\/code> mod\u00fcl\u00fc gelir. <code>os<\/code> mod\u00fcl\u00fc sayesinde, dizinleri listeleme, dosya yollar\u0131 \u00fczerinde i\u015flemler yapma ve dosya meta verilerine (boyut, olu\u015fturulma ve de\u011fi\u015ftirilme tarihleri gibi) eri\u015fme gibi bir\u00e7ok i\u015flemi ger\u00e7ekle\u015ftirebiliriz. \u00d6zellikle <code>os.path.getmtime()<\/code> fonksiyonu, bir dosyan\u0131n modifikasyon zaman damgas\u0131n\u0131 almak i\u00e7in kullan\u0131l\u0131r. Bu fonksiyon, genellikle Unix Epoch olarak adland\u0131r\u0131lan, 1 Ocak 1970 UTC&#8217;den bu yana ge\u00e7en saniye say\u0131s\u0131n\u0131 temsil eden bir kayan nokta say\u0131s\u0131 (float) d\u00f6nd\u00fcr\u00fcr.<\/p>\n<p>Zaman damgalar\u0131n\u0131 insan taraf\u0131ndan okunabilir tarihlere d\u00f6n\u00fc\u015ft\u00fcrmek ve bu tarihler \u00fczerinde kar\u015f\u0131la\u015ft\u0131rma i\u015flemleri yapmak i\u00e7in ise Python&#8217;\u0131n <code>datetime<\/code> mod\u00fcl\u00fc devreye girer. <code>datetime<\/code> mod\u00fcl\u00fc, tarih ve saat nesneleriyle \u00e7al\u0131\u015fmay\u0131 son derece kolayla\u015ft\u0131r\u0131r. Bir zaman damgas\u0131n\u0131 <code>datetime<\/code> nesnesine d\u00f6n\u00fc\u015ft\u00fcrmek, bug\u00fcn\u00fcn tarihiyle veya belirli bir tarih aral\u0131\u011f\u0131yla kolayca kar\u015f\u0131la\u015ft\u0131rma yapmam\u0131z\u0131 sa\u011flar. Bu sayede, &#8220;bu dosya bug\u00fcn m\u00fc de\u011fi\u015ftirildi?&#8221; gibi sorulara kesin cevaplar verebiliriz. Python&#8217;\u0131n bu iki mod\u00fcl\u00fc bir araya geldi\u011finde, dosya sistemini ak\u0131ll\u0131ca tarayabilen ve belirli kriterlere g\u00f6re dosya se\u00e7imi yapabilen g\u00fc\u00e7l\u00fc betikler olu\u015fturmak m\u00fcmk\u00fcn hale gelir. Bu otomasyon yetene\u011fi, dosya senkronizasyonu, yedekleme ve i\u00e7erik da\u011f\u0131t\u0131m\u0131 gibi bir\u00e7ok farkl\u0131 alanda verimlili\u011fi art\u0131rmak i\u00e7in kritik bir rol oynar. Python&#8217;\u0131n bu denli pop\u00fcler olmas\u0131n\u0131n nedenlerinden biri de, bu t\u00fcr karma\u015f\u0131k sistem g\u00f6revlerini nispeten az kodla ve y\u00fcksek okunabilirlikle \u00e7\u00f6zebilmesidir.<\/p>\n<h3>Python ile Dosya Modifikasyon Tarihi Nas\u0131l Bulunur?<\/h3>\n<p>Bir dosyan\u0131n son de\u011fi\u015ftirilme tarihini Python ile \u00f6\u011frenmek olduk\u00e7a basittir. \u0130\u015fletim sistemi fonksiyonlar\u0131n\u0131 kullanmak i\u00e7in <code>os<\/code> mod\u00fcl\u00fcn\u00fc, tarih ve saat i\u015flemleri i\u00e7in ise <code>datetime<\/code> mod\u00fcl\u00fcn\u00fc i\u00e7eri aktarmam\u0131z gerekiyor. \u0130\u015fte ad\u0131m ad\u0131m nas\u0131l yap\u0131laca\u011f\u0131 ve \u00f6rnek kod:<\/p>\n<ol>\n<li><strong><code>os<\/code> ve <code>datetime<\/code> Mod\u00fcllerini \u0130\u00e7eri Aktarma:<\/strong> Scriptimizin ba\u015f\u0131nda bu mod\u00fclleri tan\u0131mlamal\u0131y\u0131z.<\/li>\n<li><strong>Dosya Yolunu Belirleme:<\/strong> Kontrol etmek istedi\u011fimiz dosyan\u0131n tam yolunu bir de\u011fi\u015fkene atayal\u0131m.<\/li>\n<li><strong>Modifikasyon Zaman Damgas\u0131n\u0131 Alma:<\/strong> <code>os.path.getmtime()<\/code> fonksiyonunu kullanarak dosyan\u0131n son de\u011fi\u015ftirilme tarihini Unix Epoch format\u0131nda al\u0131yoruz. Bu, 1 Ocak 1970&#8217;ten bu yana ge\u00e7en saniye say\u0131s\u0131d\u0131r.<\/li>\n<li><strong>Zaman Damgas\u0131n\u0131 <code>datetime<\/code> Nesnesine \u00c7evirme:<\/strong> Elde etti\u011fimiz zaman damgas\u0131n\u0131, <code>datetime.fromtimestamp()<\/code> fonksiyonu ile okunabilir bir <code>datetime<\/code> objesine d\u00f6n\u00fc\u015ft\u00fcr\u00fcyoruz.<\/li>\n<li><strong>Bug\u00fcn\u00fcn Tarihiyle Kar\u015f\u0131la\u015ft\u0131rma:<\/strong> <code>datetime.now()<\/code> fonksiyonu ile anl\u0131k tarihi al\u0131p, dosyan\u0131n de\u011fi\u015ftirilme tarihi ile kar\u015f\u0131la\u015ft\u0131r\u0131yoruz. Bu kar\u015f\u0131la\u015ft\u0131rmay\u0131 yaparken sadece tarih k\u0131sm\u0131na odaklanmak i\u00e7in saat, dakika, saniye gibi bilgileri atabiliriz.<\/li>\n<\/ol>\n<p>\u0130\u015fte bu ad\u0131mlar\u0131 g\u00f6steren bir \u00f6rnek kod par\u00e7ac\u0131\u011f\u0131:<\/p>\n<pre><code class=\"language-python\">\nimport os\nimport datetime\n\ndef get_file_modification_date(filepath):\n    \"\"\"\n    Belirtilen dosyan\u0131n son modifikasyon tarihini datetime nesnesi olarak d\u00f6nd\u00fcr\u00fcr.\n    \"\"\"\n    if not os.path.exists(filepath):\n        print(f\"Hata: {filepath} bulunamad\u0131.\")\n        return None\n    \n    timestamp = os.path.getmtime(filepath)\n    mod_date = datetime.datetime.fromtimestamp(timestamp)\n    return mod_date\n\ndef is_file_modified_today(filepath):\n    \"\"\"\n    Dosyan\u0131n bug\u00fcn i\u00e7inde de\u011fi\u015ftirilip de\u011fi\u015ftirilmedi\u011fini kontrol eder.\n    \"\"\"\n    mod_date = get_file_modification_date(filepath)\n    if mod_date is None:\n        return False\n    \n    today = datetime.datetime.now()\n    \n    # Sadece tarih k\u0131sm\u0131n\u0131 kar\u015f\u0131la\u015ft\u0131rmak i\u00e7in .date() metodunu kullan\u0131yoruz.\n    return mod_date.date() == today.date()\n\n# \u00d6rnek Kullan\u0131m:\ntest_file = \"ornek_dosya.txt\"\n\n# Test i\u00e7in bir dosya olu\u015ftural\u0131m veya g\u00fcncelleyelim\nwith open(test_file, \"w\") as f:\n    f.write(\"Bu bir test dosyas\u0131d\u0131r.\\n\")\n    f.write(f\"G\u00fcncelleme zaman\u0131: {datetime.datetime.now()}\\n\")\n\nif is_file_modified_today(test_file):\n    print(f\"'{test_file}' dosyas\u0131 bug\u00fcn de\u011fi\u015ftirilmi\u015f.\")\nelse:\n    print(f\"'{test_file}' dosyas\u0131 bug\u00fcn de\u011fi\u015ftirilmemi\u015f.\")\n\n# Farkl\u0131 bir dosya i\u00e7in test edelim (\u00f6rne\u011fin var olmayan veya eski bir dosya)\n# os.remove(test_file) # Test dosyas\u0131n\u0131 silip tekrar olu\u015fturup eski bir tarih vermek m\u00fcmk\u00fcn ama bu \u00f6rnekte bug\u00fcn olu\u015fturduk.\n# Ger\u00e7ek bir dosyayla denemek i\u00e7in dosya yolunu g\u00fcncelleyebilirsiniz.\n<\/pre>\n<p><\/code><\/p>\n<p>Bu kod par\u00e7ac\u0131\u011f\u0131, <code>ornek_dosya.txt<\/code> ad\u0131nda bir dosya olu\u015fturur ve bu dosyan\u0131n bug\u00fcn de\u011fi\u015ftirilip de\u011fi\u015ftirilmedi\u011fini kontrol eder. <code>.date()<\/code> metodunu kullanarak yaln\u0131zca y\u0131l, ay ve g\u00fcn bilgilerini kar\u015f\u0131la\u015ft\u0131r\u0131r\u0131z. Bu, dosyan\u0131n g\u00fcn i\u00e7inde herhangi bir zamanda de\u011fi\u015ftirilmi\u015f olmas\u0131n\u0131 tespit etmemizi sa\u011flar, saat veya dakika gibi hassasiyet detaylar\u0131n\u0131 g\u00f6z ard\u0131 ederiz. Bu temel mant\u0131k, daha karma\u015f\u0131k dosya tarama ve filtreleme betiklerinin temelini olu\u015fturacakt\u0131r.<\/p>\n<h2>Ad\u0131m Ad\u0131m Python Scripti: Bug\u00fcn De\u011fi\u015fen Dosyalar\u0131 Listeleme ve Filtreleme<\/h2>\n<p>\u015eimdiye kadar, tek bir dosyan\u0131n modifikasyon tarihini nas\u0131l alaca\u011f\u0131m\u0131z\u0131 ve bug\u00fcn\u00fcn tarihiyle nas\u0131l kar\u015f\u0131la\u015ft\u0131raca\u011f\u0131m\u0131z\u0131 \u00f6\u011frendik. Ancak ger\u00e7ek d\u00fcnya senaryolar\u0131nda, genellikle bir dizin a\u011fac\u0131ndaki t\u00fcm dosyalar\u0131 taramam\u0131z ve yaln\u0131zca belirli kriterlere uyanlar\u0131 se\u00e7memiz gerekir. Bu b\u00f6l\u00fcmde, bir dizin i\u00e7erisindeki (alt dizinler dahil) bug\u00fcn de\u011fi\u015ftirilmi\u015f t\u00fcm dosyalar\u0131 bulan ve listeleyen kapsaml\u0131 bir Python beti\u011fi olu\u015fturaca\u011f\u0131z.<\/p>\n<p>Scriptin genel yap\u0131s\u0131 \u015fu ad\u0131mlar\u0131 i\u00e7erecektir:<\/p>\n<ol>\n<li><strong>Hedef Dizin Belirleme:<\/strong> Kontrol etmek istedi\u011fimiz ana dizini belirleyece\u011fiz.<\/li>\n<li><strong>Dizin A\u011fac\u0131n\u0131 Tarama:<\/strong> Python'\u0131n <code>os.walk()<\/code> fonksiyonu, belirtilen dizin alt\u0131ndaki t\u00fcm alt dizinleri ve dosyalar\u0131 gezmek i\u00e7in idealdir. Bu fonksiyon, her ad\u0131mda mevcut dizin yolu, alt dizin listesi ve dosya listesi olmak \u00fczere \u00fc\u00e7 de\u011fer d\u00f6nd\u00fcr\u00fcr.<\/li>\n<li><strong>Her Dosyay\u0131 Kontrol Etme:<\/strong> Tarama s\u0131ras\u0131nda kar\u015f\u0131la\u015ft\u0131\u011f\u0131m\u0131z her dosya i\u00e7in, daha \u00f6nce \u00f6\u011frendi\u011fimiz <code>is_file_modified_today()<\/code> mant\u0131\u011f\u0131n\u0131 uygulayaca\u011f\u0131z.<\/li>\n<li><strong>Uygun Dosyalar\u0131 Listeleme:<\/strong> Bug\u00fcn de\u011fi\u015ftirildi\u011fi tespit edilen dosyalar\u0131 bir liste i\u00e7inde toplayaca\u011f\u0131z.<\/li>\n<\/ol>\n<p>\u0130\u015fte bu mant\u0131\u011f\u0131 uygulayan Python scripti:<\/p>\n<pre><code class=\"language-python\">\nimport os\nimport datetime\nimport time # sleep fonksiyonu i\u00e7in\n\ndef get_file_modification_date(filepath):\n    \"\"\"\n    Belirtilen dosyan\u0131n son modifikasyon tarihini datetime nesnesi olarak d\u00f6nd\u00fcr\u00fcr.\n    \"\"\"\n    if not os.path.exists(filepath):\n        return None\n    try:\n        timestamp = os.path.getmtime(filepath)\n        mod_date = datetime.datetime.fromtimestamp(timestamp)\n        return mod_date\n    except OSError as e:\n        print(f\"Dosya '{filepath}' i\u00e7in modifikasyon tarihi al\u0131n\u0131rken hata olu\u015ftu: {e}\")\n        return None\n\ndef is_file_modified_today(filepath):\n    \"\"\"\n    Dosyan\u0131n bug\u00fcn i\u00e7inde de\u011fi\u015ftirilip de\u011fi\u015ftirilmedi\u011fini kontrol eder.\n    \"\"\"\n    mod_date = get_file_modification_date(filepath)\n    if mod_date is None:\n        return False\n    \n    today = datetime.datetime.now()\n    return mod_date.date() == today.date()\n\ndef find_today_modified_files(root_dir):\n    \"\"\"\n    Belirtilen k\u00f6k dizin alt\u0131ndaki bug\u00fcn de\u011fi\u015ftirilmi\u015f t\u00fcm dosyalar\u0131 bulur.\n    \"\"\"\n    modified_files = []\n    if not os.path.isdir(root_dir):\n        print(f\"Hata: '{root_dir}' ge\u00e7erli bir dizin de\u011fil.\")\n        return modified_files\n\n    print(f\"'{root_dir}' dizini alt\u0131nda bug\u00fcn de\u011fi\u015ftirilen dosyalar taran\u0131yor...\")\n    for dirpath, dirnames, filenames in os.walk(root_dir):\n        for filename in filenames:\n            full_filepath = os.path.join(dirpath, filename)\n            if is_file_modified_today(full_filepath):\n                modified_files.append(full_filepath)\n    return modified_files\n\n# --- \u00d6rnek Kullan\u0131m ---\nif __name__ == \"__main__\":\n    # Test dizini olu\u015ftural\u0131m\n    test_root_dir = \"test_files_today\"\n    os.makedirs(test_root_dir, exist_ok=True)\n    os.makedirs(os.path.join(test_root_dir, \"alt_dizin\"), exist_ok=True)\n\n    # Bug\u00fcn de\u011fi\u015ftirilmi\u015f bir dosya olu\u015ftural\u0131m\n    file1_path = os.path.join(test_root_dir, \"dosya1.txt\")\n    with open(file1_path, \"w\") as f:\n        f.write(\"Bu, bug\u00fcn de\u011fi\u015ftirilen bir dosyad\u0131r.\\n\")\n    print(f\"'{file1_path}' olu\u015fturuldu\/g\u00fcncellendi.\")\n\n    # Bug\u00fcn de\u011fi\u015ftirilmi\u015f ba\u015fka bir dosya olu\u015ftural\u0131m (alt dizinde)\n    file2_path = os.path.join(test_root_dir, \"alt_dizin\", \"dosya2.log\")\n    with open(file2_path, \"w\") as f:\n        f.write(\"Bu da bug\u00fcn de\u011fi\u015ftirilen bir log dosyas\u0131d\u0131r.\\n\")\n    print(f\"'{file2_path}' olu\u015fturuldu\/g\u00fcncellendi.\")\n\n    # Eski bir dosya olu\u015ftural\u0131m (modifikasyon tarihini geriye alal\u0131m - bu manuel bir ad\u0131md\u0131r)\n    file3_path = os.path.join(test_root_dir, \"eski_dosya.doc\")\n    with open(file3_path, \"w\") as f:\n        f.write(\"Bu, d\u00fcn veya daha \u00f6nce de\u011fi\u015ftirilen bir dosyad\u0131r.\\n\")\n    \n    # Dosyan\u0131n modifikasyon zaman\u0131n\u0131 manuel olarak de\u011fi\u015ftirmek i\u00e7in\n    # Not: Baz\u0131 dosya sistemlerinde bu hassasiyetle \u00e7al\u0131\u015fmayabilir.\n    # En iyi y\u00f6ntem: Ger\u00e7ekten d\u00fcn olu\u015fturulmu\u015f bir dosya ile test etmek.\n    yesterday = datetime.datetime.now() - datetime.timedelta(days=1)\n    # os.utime(file3_path, (yesterday.timestamp(), yesterday.timestamp())) # Bu sat\u0131r bazen izin hatalar\u0131na neden olabilir.\n    print(f\"'{file3_path}' olu\u015fturuldu (modifikasyon tarihi eski olarak kabul edilecek).\")\n\n    # Scripti \u00e7al\u0131\u015ft\u0131r ve sonu\u00e7lar\u0131 g\u00f6ster\n    today_modified = find_today_modified_files(test_root_dir)\n\n    if today_modified:\n        print(\"\\nBug\u00fcn de\u011fi\u015ftirilen dosyalar:\")\n        for f in today_modified:\n            print(f\"- {f}\")\n    else:\n        print(\"\\nBug\u00fcn de\u011fi\u015ftirilen dosya bulunamad\u0131.\")\n    \n    # Test dizinini ve i\u00e7eri\u011fini temizleyelim\n    # import shutil\n    # shutil.rmtree(test_root_dir)\n    # print(f\"\\n'{test_root_dir}' dizini temizlendi.\")\n<\/pre>\n<p><\/code><\/p>\n<div class=\"expert-tip\">\n<p>Uzman \u0130pucu: B\u00fcy\u00fck dizinlerde performans\u0131 art\u0131rmak i\u00e7in <code>os.walk()<\/code> yerine <code>os.scandir()<\/code> kullanmay\u0131 d\u00fc\u015f\u00fcnebilirsiniz. <code>os.scandir()<\/code>, <code>os.walk()<\/code>'a g\u00f6re daha h\u0131zl\u0131d\u0131r \u00e7\u00fcnk\u00fc dosya veya dizin olup olmad\u0131\u011f\u0131n\u0131 \u00f6nceden belirlemek i\u00e7in ek bir sistem \u00e7a\u011fr\u0131s\u0131 yapmak yerine, do\u011frudan giri\u015flerin \u00f6zelliklerine eri\u015fmenizi sa\u011flar. Ancak bu makaledeki gibi basit senaryolar i\u00e7in <code>os.walk()<\/code> yeterlidir.<\/p>\n<\/p><\/div>\n<p>Bu scripti \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda, <code>test_files_today<\/code> ad\u0131nda bir dizin olu\u015fturacak, i\u00e7ine baz\u0131 test dosyalar\u0131 koyacak ve ard\u0131ndan bug\u00fcn de\u011fi\u015ftirilenleri listeleyecektir. \"Eski dosya\" \u00f6rne\u011fi, <code>os.utime()<\/code> ile dosyan\u0131n modifikasyon tarihini manip\u00fcle etme potansiyelini g\u00f6stermekle birlikte, genellikle test i\u00e7in ger\u00e7ekte eski bir dosya kullanmak daha sa\u011flam bir yakla\u015f\u0131md\u0131r. Bu betik, dosya sistemi taramas\u0131 ve tarih filtreleme mant\u0131\u011f\u0131n\u0131 birle\u015ftirerek, ihtiyac\u0131n\u0131z olan dosyalar\u0131 h\u0131zl\u0131ca bulman\u0131z\u0131 sa\u011flar.<\/p>\n<h2>De\u011fi\u015fen Dosyalar\u0131 Otomatik Olarak Y\u00fcklemek: FTP ve Bulut Servis Entegrasyonu Nas\u0131l Yap\u0131l\u0131r?<\/h2>\n<p>Bug\u00fcn de\u011fi\u015ftirilen dosyalar\u0131 bulduktan sonraki mant\u0131kl\u0131 ad\u0131m, bu dosyalar\u0131 bir sunucuya veya bulut depolama alan\u0131na otomatik olarak y\u00fcklemektir. Bu, web sitesi g\u00fcncellemelerini da\u011f\u0131tmak, log dosyalar\u0131n\u0131 merkezi bir depoya yedeklemek veya raporlar\u0131 payla\u015f\u0131lan bir alana senkronize etmek gibi bir\u00e7ok senaryoda hayati \u00f6nem ta\u015f\u0131r. Python, farkl\u0131 protokoller ve API'ler arac\u0131l\u0131\u011f\u0131yla dosya y\u00fckleme i\u015flemlerini otomatikle\u015ftirmek i\u00e7in geni\u015f bir k\u00fct\u00fcphane yelpazesi sunar.<\/p>\n<h3>FTP ile Dosya Y\u00fckleme (File Transfer Protocol)<\/h3>\n<p>FTP, internet \u00fczerinden dosya transferi i\u00e7in en eski ve en yayg\u0131n kullan\u0131lan protokollerden biridir. Python'\u0131n standart k\u00fct\u00fcphanesinde yer alan <code>ftplib<\/code> mod\u00fcl\u00fc sayesinde FTP sunucular\u0131yla kolayca etkile\u015fime ge\u00e7ebiliriz. \u0130\u015fte temel bir FTP y\u00fckleme fonksiyonu:<\/p>\n<pre><code class=\"language-python\">\nimport ftplib\nimport os\n\ndef upload_file_to_ftp(ftp_host, ftp_user, ftp_password, local_filepath, remote_dir=\"\/\"):\n    \"\"\"\n    Yerel bir dosyay\u0131 FTP sunucusuna y\u00fckler.\n    \"\"\"\n    filename = os.path.basename(local_filepath)\n    remote_filepath = os.path.join(remote_dir, filename).replace(\"\\\\\", \"\/\") # Windows yollar\u0131 i\u00e7in d\u00fczeltme\n\n    try:\n        with ftplib.FTP(ftp_host) as ftp:\n            ftp.login(user=ftp_user, passwd=ftp_password)\n            print(f\"FTP sunucusuna ba\u015far\u0131yla ba\u011fland\u0131: {ftp_host}\")\n\n            # Uzak dizine git veya olu\u015ftur (e\u011fer yoksa)\n            try:\n                ftp.cwd(remote_dir)\n            except ftplib.error_perm:\n                print(f\"Uzak dizin '{remote_dir}' bulunamad\u0131, olu\u015fturuluyor...\")\n                ftp.mkd(remote_dir)\n                ftp.cwd(remote_dir)\n\n            with open(local_filepath, 'rb') as f:\n                ftp.storbinary(f'STOR {filename}', f)\n            print(f\"'{local_filepath}' ba\u015far\u0131yla '{ftp_host}{remote_filepath}' adresine y\u00fcklendi.\")\n            return True\n    except ftplib.all_errors as e:\n        print(f\"FTP y\u00fckleme hatas\u0131: {e}\")\n        return False\n\n# --- \u00d6rnek Kullan\u0131m (Ger\u00e7ek kimlik bilgileriyle de\u011fi\u015ftirin!) ---\n# if __name__ == \"__main__\":\n#     # \u00d6RNEK: L\u00fctfen KEND\u0130 FTP bilgilerinizle de\u011fi\u015ftirin\n#     FTP_HOST = \"ftp.example.com\"\n#     FTP_USER = \"username\"\n#     FTP_PASS = \"password\"\n#     REMOTE_UPLOAD_DIR = \"\/uploads\/today_changes\" # Uzak sunucudaki hedef dizin\n\n#     # Daha \u00f6nceki scriptten bug\u00fcn de\u011fi\u015fen dosyalar\u0131 alal\u0131m\n#     # Bu k\u0131sm\u0131 \u00f6nceki find_today_modified_files fonksiyonunun \u00e7\u0131kt\u0131s\u0131 olarak d\u00fc\u015f\u00fcnebiliriz.\n#     # \u00d6rne\u011fin: today_modified_files = find_today_modified_files(\"test_files_today\")\n\n#     # Test amac\u0131yla bir dosya olu\u015ftural\u0131m ve y\u00fckleyelim\n#     test_upload_file_path = \"upload_test.txt\"\n#     with open(test_upload_file_path, \"w\") as f:\n#         f.write(\"Bu, FTP ile y\u00fcklenecek bir test dosyas\u0131d\u0131r.\\n\")\n    \n#     # today_modified_files = [test_upload_file_path] # Test dosyas\u0131 ile sim\u00fcle edelim\n\n#     # for file_to_upload in today_modified_files:\n#     #     print(f\"\\nY\u00fckleniyor: {file_to_upload}\")\n#     #     success = upload_file_to_ftp(FTP_HOST, FTP_USER, FTP_PASS, file_to_upload, REMOTE_UPLOAD_DIR)\n#     #     if success:\n#     #         print(\"Y\u00fckleme ba\u015far\u0131l\u0131.\")\n#     #     else:\n#     #         print(\"Y\u00fckleme ba\u015far\u0131s\u0131z.\")\n    \n#     # os.remove(test_upload_file_path) # Test dosyas\u0131n\u0131 temizle\n<\/pre>\n<p><\/code><\/p>\n<p><strong>G\u00fcvenlik Uyar\u0131s\u0131:<\/strong> FTP, verileri genellikle \u015fifrelemeden aktard\u0131\u011f\u0131 i\u00e7in hassas veriler i\u00e7in ideal de\u011fildir. SFTP (SSH File Transfer Protocol) veya FTPS (FTP over SSL\/TLS) gibi \u015fifreli alternatifler tercih edilmelidir. Python'da SFTP i\u00e7in <code>paramiko<\/code> gibi \u00fc\u00e7\u00fcnc\u00fc taraf k\u00fct\u00fcphaneler mevcuttur.<\/p>\n<h3>Bulut Depolama Servisleri (AWS S3, Google Cloud Storage, Azure Blob Storage)<\/h3>\n<p>G\u00fcn\u00fcm\u00fczde bulut tabanl\u0131 depolama \u00e7\u00f6z\u00fcmleri \u00e7ok pop\u00fclerdir. Bu servislerin her birinin kendi Python SDK's\u0131 (Software Development Kit) bulunur. \u00d6rne\u011fin:<\/p>\n<ul>\n<li><strong>AWS S3 i\u00e7in:<\/strong> <code>boto3<\/code> k\u00fct\u00fcphanesi kullan\u0131l\u0131r.<\/li>\n<li><strong>Google Cloud Storage i\u00e7in:<\/strong> <code>google-cloud-storage<\/code> k\u00fct\u00fcphanesi kullan\u0131l\u0131r.<\/li>\n<li><strong>Azure Blob Storage i\u00e7in:<\/strong> <code>azure-storage-blob<\/code> k\u00fct\u00fcphanesi kullan\u0131l\u0131r.<\/li>\n<\/ul>\n<p>Bu k\u00fct\u00fcphanelerin kullan\u0131m\u0131, genellikle bir istemci nesnesi olu\u015fturmak, kimlik do\u011frulamak (API anahtarlar\u0131 veya servis hesaplar\u0131 ile) ve ard\u0131ndan bir \"upload\" metodu \u00e7a\u011f\u0131rmak \u015feklinde ilerler. Her servisin kendine \u00f6zg\u00fc parametreleri ve yetkilendirme mekanizmalar\u0131 olsa da, genel ak\u0131\u015f benzerdir.<\/p>\n<pre><code class=\"language-python\">\n# AWS S3 \u00d6rne\u011fi (boto3 y\u00fckl\u00fc olmal\u0131d\u0131r: pip install boto3)\n# import boto3\n# import os\n\n# def upload_file_to_s3(bucket_name, local_filepath, s3_key):\n#     \"\"\"\n#     Yerel bir dosyay\u0131 AWS S3'e y\u00fckler.\n#     \"\"\"\n#     s3 = boto3.client('s3')\n#     try:\n#         s3.upload_file(local_filepath, bucket_name, s3_key)\n#         print(f\"'{local_filepath}' ba\u015far\u0131yla S3'e y\u00fcklendi: s3:\/\/{bucket_name}\/{s3_key}\")\n#         return True\n#     except Exception as e:\n#         print(f\"S3 y\u00fckleme hatas\u0131: {e}\")\n#         return False\n\n# # \u00d6rnek Kullan\u0131m:\n# # if __name__ == \"__main__\":\n# #     AWS_BUCKET_NAME = \"your-s3-bucket-name\"\n# #     LOCAL_FILE_PATH = \"upload_test.txt\" # \u00d6nceki \u00f6rnekten gelen dosya\n# #     S3_OBJECT_KEY = f\"uploads\/{os.path.basename(LOCAL_FILE_PATH)}\"\n\n# #     success = upload_file_to_s3(AWS_BUCKET_NAME, LOCAL_FILE_PATH, S3_OBJECT_KEY)\n# #     if success:\n# #         print(\"S3 Y\u00fckleme Ba\u015far\u0131l\u0131.\")\n# #     else:\n# #         print(\"S3 Y\u00fckleme Ba\u015far\u0131s\u0131z.\")\n<\/pre>\n<p><\/code><\/p>\n<p><strong>Kimlik Do\u011frulama ve G\u00fcvenlik:<\/strong> Hassas kimlik bilgileri (FTP \u015fifreleri, AWS Access Key'ler vb.) asla do\u011frudan koda yaz\u0131lmamal\u0131d\u0131r. Bunun yerine, ortam de\u011fi\u015fkenleri, yap\u0131land\u0131rma dosyalar\u0131 (<code>.env<\/code> dosyalar\u0131) veya AWS Secrets Manager\/Google Secret Manager gibi g\u00fcvenli gizli y\u00f6netim servisleri kullan\u0131lmal\u0131d\u0131r. Bu yakla\u015f\u0131m, g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 \u00f6nler ve kimlik bilgilerini koddan izole eder.<\/p>\n<p>Bu otomasyon yetene\u011fi, dosya y\u00f6netimi s\u00fcre\u00e7lerinizi \u00f6nemli \u00f6l\u00e7\u00fcde basitle\u015ftirir ve veri senkronizasyonunun ve yedeklemesinin g\u00fcvenilirli\u011fini art\u0131r\u0131r. Hangi y\u00fckleme y\u00f6ntemini se\u00e7erseniz se\u00e7in, Python'\u0131n esnekli\u011fi sayesinde ihtiya\u00e7lar\u0131n\u0131za uygun bir \u00e7\u00f6z\u00fcm bulman\u0131z m\u00fcmk\u00fcnd\u00fcr.<\/p>\n<h2>Senaryolar ve Vaka Analizleri: Ger\u00e7ek D\u00fcnyada Bu Script Nas\u0131l Kullan\u0131l\u0131r?<\/h2>\n<p>Bir Python scriptinin bug\u00fcn de\u011fi\u015ftirilmi\u015f dosyalar\u0131 bulup bunlar\u0131 otomatik olarak y\u00fckleyebilme yetene\u011fi, i\u015f s\u00fcre\u00e7lerini optimize etmek i\u00e7in say\u0131s\u0131z f\u0131rsat sunar. \u0130\u015fte bu scriptin ger\u00e7ek d\u00fcnyada nas\u0131l kullan\u0131labilece\u011fine dair \u00fc\u00e7 farkl\u0131 vaka analizi:<\/p>\n<h3>Vaka 1: Dinamik Web Sitesi \u0130\u00e7erik G\u00fcncellemeleri<\/h3>\n<p><strong>Senaryo:<\/strong> Bir e-ticaret sitesi veya haber portal\u0131 d\u00fc\u015f\u00fcn\u00fcn. \u0130\u00e7erik y\u00f6neticileri (CMS) \u00fczerinden veya do\u011frudan dosya sisteminde g\u00fcnde onlarca resim, \u00fcr\u00fcn a\u00e7\u0131klamas\u0131 (HTML\/CSS), haber metni veya JavaScript dosyas\u0131 g\u00fcncelleyebilirler. Her g\u00fcncellemede t\u00fcm web sitesi dosyalar\u0131n\u0131 FTP ile sunucuya y\u00fcklemek hem zaman al\u0131c\u0131 hem de bant geni\u015fli\u011fi israf\u0131d\u0131r. Yanl\u0131\u015fl\u0131kla eski bir dosyan\u0131n y\u00fcklenmesi, sitede g\u00f6rsel bozukluklara veya i\u015flevsel hatalara yol a\u00e7abilir.<\/p>\n<p><strong>\u00c7\u00f6z\u00fcm:<\/strong> Python scriptimizi web sitesinin yerel kopyas\u0131n\u0131n bulundu\u011fu ana dizinde \u00e7al\u0131\u015facak \u015fekilde yap\u0131land\u0131rabiliriz. Script, sadece son 24 saat i\u00e7inde de\u011fi\u015ftirilen HTML, CSS, JS, JPG veya PNG gibi dosya t\u00fcrlerini tespit eder. Ard\u0131ndan, bu belirlenen dosyalar\u0131 do\u011frudan \u00fcretim sunucusuna (FTP\/SFTP veya bulut depolama) y\u00fckler. Bu sayede:<\/p>\n<ul>\n<li>Yaln\u0131zca gerekli dosyalar aktar\u0131ld\u0131\u011f\u0131 i\u00e7in <strong>y\u00fckleme s\u00fcresi k\u0131sal\u0131r<\/strong>.<\/li>\n<li><strong>Bant geni\u015fli\u011fi kullan\u0131m\u0131 azal\u0131r.<\/strong><\/li>\n<li>Manuel hata yapma riski minimuma iner, \u00e7\u00fcnk\u00fc script her zaman dosyan\u0131n en g\u00fcncel s\u00fcr\u00fcm\u00fcn\u00fc y\u00fcklemeyi garantiler.<\/li>\n<li>Bu s\u00fcre\u00e7 bir <strong>Cron i\u015fi<\/strong> veya <strong>Windows G\u00f6rev Zamanlay\u0131c\u0131<\/strong> arac\u0131l\u0131\u011f\u0131yla belirli aral\u0131klarla (\u00f6rne\u011fin her 15 dakikada bir) otomatik olarak \u00e7al\u0131\u015ft\u0131r\u0131labilir, b\u00f6ylece i\u00e7erik g\u00fcncellemeleri an\u0131nda canl\u0131ya al\u0131n\u0131r.<\/li>\n<\/ul>\n<h3>Vaka 2: Otomatik Log Dosyas\u0131 Yedekleme ve Analiz \u00d6n Haz\u0131rl\u0131\u011f\u0131<\/h3>\n<p><strong>Senaryo:<\/strong> B\u00fcy\u00fck bir sunucu \u00e7iftli\u011fi veya mikro servis mimarisine sahip bir sistemde, her sunucu veya servis, g\u00fcnl\u00fck olarak GB'larca log dosyas\u0131 \u00fcretebilir. Bu loglar, hata ay\u0131klama, performans izleme ve g\u00fcvenlik denetimleri i\u00e7in kritik \u00f6neme sahiptir. Bu log dosyalar\u0131n\u0131 merkezi bir depoya (\u00f6rne\u011fin AWS S3 veya bir NAS) yedeklemek ve bazen de s\u0131k\u0131\u015ft\u0131r\u0131lm\u0131\u015f formatta ar\u015fivlemek gerekebilir. Ancak t\u00fcm loglar\u0131 her g\u00fcn yedeklemek, depolama alan\u0131 ve a\u011f kaynaklar\u0131 a\u00e7\u0131s\u0131ndan verimsiz olabilir.<\/p>\n<p><strong>\u00c7\u00f6z\u00fcm:<\/strong> Python scripti, her sunucuda \u00e7al\u0131\u015ft\u0131r\u0131larak yaln\u0131zca son 24 saat i\u00e7inde g\u00fcncellenen veya yeni olu\u015fturulan log dosyalar\u0131n\u0131 (<code>.log<\/code>, <code>.txt<\/code> vb.) tespit eder. Script, bu dosyalar\u0131 otomatik olarak s\u0131k\u0131\u015ft\u0131rabilir (\u00f6rne\u011fin <code>gzip<\/code> ile) ve ard\u0131ndan merkezi bir bulut depolama kovas\u0131na y\u00fckler. Bu yakla\u015f\u0131m:<\/p>\n<ul>\n<li><strong>Depolama alan\u0131ndan tasarruf sa\u011flar<\/strong> \u00e7\u00fcnk\u00fc yaln\u0131zca yeni ve de\u011fi\u015ftirilmi\u015f loglar i\u015flenir ve s\u0131k\u0131\u015ft\u0131r\u0131l\u0131r.<\/li>\n<li><strong>A\u011f bant geni\u015fli\u011fini optimize eder.<\/strong><\/li>\n<li>Log toplama ve analiz platformlar\u0131 i\u00e7in <strong>veri haz\u0131rl\u0131k s\u00fcrecini h\u0131zland\u0131r\u0131r<\/strong>, \u00e7\u00fcnk\u00fc yaln\u0131zca ilgili loglar i\u015flenebilir.<\/li>\n<li>Ola\u011fan\u00fcst\u00fc durum kurtarma (Disaster Recovery) senaryolar\u0131nda, <strong>en g\u00fcncel loglar\u0131n merkezi bir yerde<\/strong> olmas\u0131n\u0131 garantiler.<\/li>\n<\/ul>\n<h3>Vaka 3: Finansal Raporlar\u0131n ve Belge Senkronizasyonunun Otomatikle\u015ftirilmesi<\/h3>\n<p><strong>Senaryo:<\/strong> Bir finans departman\u0131, g\u00fcnl\u00fck veya haftal\u0131k bazda \u00e7e\u015fitli raporlar, tablolar ve yasal belgeler olu\u015fturur. Bu belgelerin, belirli bir zamanda bir araya getirilip, y\u00f6neticilerin eri\u015febilece\u011fi g\u00fcvenli bir a\u011f s\u00fcr\u00fcc\u00fcs\u00fcne veya bulut payla\u015f\u0131m\u0131na y\u00fcklenmesi gerekmektedir. Manuel olarak her g\u00fcn hangi raporun g\u00fcncellendi\u011fini bulmak ve do\u011fru yere kopyalamak, insan hatas\u0131na a\u00e7\u0131k ve verimsiz bir s\u00fcre\u00e7tir.<\/p>\n<p><strong>\u00c7\u00f6z\u00fcm:<\/strong> Python scripti, finans departman\u0131n\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131 ana dizini izleyecek \u015fekilde yap\u0131land\u0131r\u0131l\u0131r. Belirli dosya uzant\u0131lar\u0131na (<code>.xlsx<\/code>, <code>.pdf<\/code>, <code>.docx<\/code> vb.) sahip ve bug\u00fcn de\u011fi\u015ftirilmi\u015f t\u00fcm dosyalar\u0131 tespit eder. Script, bu dosyalar\u0131 belirlenen g\u00fcvenli bulut depolama alan\u0131na (\u00f6rne\u011fin SharePoint, Google Drive veya \u00f6zel bir bulut) otomatik olarak y\u00fckler. Bu entegrasyon i\u00e7in ilgili bulut servisinin Python API'si kullan\u0131l\u0131r.<\/p>\n<ul>\n<li><strong>Veri g\u00fcncelli\u011fi garantilenir:<\/strong> Y\u00f6neticiler her zaman en g\u00fcncel raporlara eri\u015febilir.<\/li>\n<li><strong>Zaman tasarrufu:<\/strong> Departman \u00e7al\u0131\u015fanlar\u0131, dosya transferi yerine daha de\u011ferli i\u015flere odaklanabilir.<\/li>\n<li><strong>Hata riski azal\u0131r:<\/strong> Eksik veya yanl\u0131\u015f rapor y\u00fcklemelerinin \u00f6n\u00fcne ge\u00e7ilir.<\/li>\n<li><strong>Uyum (Compliance):<\/strong> Yasal veya denetim gereksinimleri i\u00e7in kritik olan belgelerin otomatik olarak do\u011fru yerde ve zamanda ar\u015fivlenmesi sa\u011flan\u0131r.<\/li>\n<\/ul>\n<p>Bu vaka analizleri, basit bir \"bug\u00fcn de\u011fi\u015fen dosyalar\u0131 bul\" scriptinin, farkl\u0131 end\u00fcstrilerde ve i\u015f ak\u0131\u015flar\u0131nda nas\u0131l g\u00fc\u00e7l\u00fc bir otomasyon arac\u0131 haline gelebilece\u011fini g\u00f6stermektedir. Esnek yap\u0131s\u0131 sayesinde, scripti kendi \u00f6zel ihtiya\u00e7lar\u0131n\u0131za g\u00f6re uyarlayabilir ve daha bir\u00e7ok senaryoda kullanabilirsiniz.<\/p>\n<h2>\u0130leri D\u00fczey Optimizasyonlar ve G\u00fcvenlik \u0130pu\u00e7lar\u0131 Nelerdir?<\/h2>\n<p>Bug\u00fcn de\u011fi\u015ftirilmi\u015f dosyalar\u0131 bulan ve y\u00fckleyen temel bir Python scripti olu\u015fturduk. Ancak b\u00fcy\u00fck \u00f6l\u00e7ekli uygulamalarda veya hassas verilerle \u00e7al\u0131\u015f\u0131rken, performans, g\u00fcvenilirlik ve g\u00fcvenlik konular\u0131n\u0131 da g\u00f6z \u00f6n\u00fcnde bulundurmak \u00f6nemlidir. \u0130\u015fte ileri d\u00fczey optimizasyonlar ve g\u00fcvenlik ipu\u00e7lar\u0131:<\/p>\n<h3>Performans Optimizasyonlar\u0131<\/h3>\n<ol>\n<li><strong>B\u00fcy\u00fck Dizinler \u0130\u00e7in <code>os.scandir()<\/code>:<\/strong> Daha \u00f6nce de belirtildi\u011fi gibi, \u00e7ok say\u0131da dosya i\u00e7eren dizinlerde <code>os.walk()<\/code> yerine <code>os.scandir()<\/code> kullanmak performans\u0131 art\u0131rabilir. <code>os.scandir()<\/code>, <code>os.DirEntry<\/code> nesneleri d\u00f6nd\u00fcr\u00fcr ve bu nesneler \u00fczerinde <code>is_file()<\/code>, <code>stat()<\/code> gibi metotlar\u0131 do\u011frudan \u00e7a\u011f\u0131rarak ek sistem \u00e7a\u011fr\u0131lar\u0131ndan ka\u00e7\u0131n\u0131r.<\/li>\n<li><strong>Dosya Tipi Filtrelemesi:<\/strong> E\u011fer belirli dosya t\u00fcrlerini (\u00f6rn. sadece <code>.log<\/code> veya <code>.html<\/code> dosyalar\u0131) ar\u0131yorsan\u0131z, <code>filename.endswith('.log')<\/code> gibi kontrollerle tarama esnas\u0131nda gereksiz dosyalar\u0131 atlayabilirsiniz. Bu, \u00f6zellikle devasa dizinlerde b\u00fcy\u00fck bir performans kazanc\u0131 sa\u011flar.<\/li>\n<li><strong>\u00d6nbellekleme (Caching):<\/strong> E\u011fer script s\u0131k \u00e7al\u0131\u015ft\u0131r\u0131l\u0131yorsa ve dosya sistemi \u00e7ok s\u0131k de\u011fi\u015fmiyorsa, dosya meta verilerini (mtime gibi) bir veritaban\u0131nda veya bir JSON\/pickle dosyas\u0131nda \u00f6nbelle\u011fe almak, her \u00e7al\u0131\u015ft\u0131rmada disk okuma maliyetini azaltabilir. Sadece yeni veya de\u011fi\u015fmi\u015f dosya yollar\u0131 i\u00e7in tam kontrol yap\u0131l\u0131r.<\/li>\n<li><strong>Paralel \u0130\u015flem (Multiprocessing\/Multithreading):<\/strong> E\u011fer dizin a\u011fac\u0131 \u00e7ok b\u00fcy\u00fck ve farkl\u0131 dallar\u0131 birbirinden ba\u011f\u0131ms\u0131z olarak taranabiliyorsa, <code>concurrent.futures<\/code> mod\u00fcl\u00fc ile paralel i\u015flem (CPU-bound tasks i\u00e7in multiprocessing) veya paralel i\/o (I\/O-bound tasks i\u00e7in multithreading) kullanarak scriptin daha h\u0131zl\u0131 \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flayabilirsiniz.<\/li>\n<\/ol>\n<h3>Hata Y\u00f6netimi ve Loglama<\/h3>\n<p>Sa\u011flam bir script, beklenmedik durumlar\u0131 (dosya eri\u015fim izinleri, a\u011f kesintileri vb.) d\u00fczg\u00fcn bir \u015fekilde y\u00f6netebilmelidir:<\/p>\n<ol>\n<li><strong>Try-Except Bloklar\u0131:<\/strong> Dosya i\u015flemleri (okuma, yazma, mtime alma) ve a\u011f i\u015flemleri (FTP ba\u011flant\u0131s\u0131, y\u00fckleme) s\u0131ras\u0131nda olu\u015fabilecek hatalar\u0131 yakalamak i\u00e7in kapsaml\u0131 <code>try-except<\/code> bloklar\u0131 kullan\u0131n.<\/li>\n<li><strong>Loglama Mod\u00fcl\u00fc:<\/strong> Python'\u0131n <code>logging<\/code> mod\u00fcl\u00fc, scriptin \u00e7al\u0131\u015fma zaman\u0131 bilgilerini, uyar\u0131lar\u0131n\u0131 ve hatalar\u0131n\u0131 bir dosyaya veya konsola kaydetmek i\u00e7in idealdir. Bu sayede scriptin ne zaman, nerede ve neden ba\u015far\u0131s\u0131z oldu\u011funu kolayca takip edebilirsiniz.<\/li>\n<pre><code class=\"language-python\">\nimport logging\n\nlogging.basicConfig(filename='file_sync.log', level=logging.INFO,\n                    format='%(asctime)s - %(levelname)s - %(message)s')\n\n# ... script i\u00e7inde ...\ntry:\n    # Dosya i\u015flemi\n    pass\nexcept Exception as e:\n    logging.error(f\"Dosya i\u015flenirken hata olu\u015ftu: {e}\")\n<\/pre>\n<p><\/code>\n    <\/ol>\n<h3>Zamanlanm\u0131\u015f G\u00f6revler<\/h3>\n<p>Bu scripti otomatik olarak \u00e7al\u0131\u015ft\u0131rmak i\u00e7in i\u015fletim sisteminin zamanlay\u0131c\u0131lar\u0131n\u0131 kullanmak gerekir:<\/p>\n<ul>\n<li><strong>Linux\/macOS: Cron Job:<\/strong> <code>crontab -e<\/code> komutu ile bir cron i\u015fi olu\u015fturarak scripti belirli aral\u0131klarla \u00e7al\u0131\u015ft\u0131rabilirsiniz.\n<pre><code class=\"language-bash\">\n# Her g\u00fcn gece 03:00'te scripti \u00e7al\u0131\u015ft\u0131r\n0 3 * * * \/usr\/bin\/python3 \/path\/to\/your\/script.py >> \/var\/log\/file_sync.log 2>&1\n<\/pre>\n<p><\/code>\n        <\/li>\n<li><strong>Windows: G\u00f6rev Zamanlay\u0131c\u0131 (Task Scheduler):<\/strong> Windows'ta \"G\u00f6rev Zamanlay\u0131c\u0131\" uygulamas\u0131n\u0131 kullanarak scripti belirli bir program dahilinde otomatik olarak ba\u015flatabilirsiniz.<\/li>\n<\/ul>\n<h3>G\u00fcvenlik \u0130pu\u00e7lar\u0131<\/h3>\n<p>G\u00fcvenlik, otomasyon scriptlerinde asla g\u00f6z ard\u0131 edilmemesi gereken bir konudur:<\/p>\n<ol>\n<li><strong>Kimlik Bilgisi Y\u00f6netimi:<\/strong> FTP \u015fifreleri, API anahtarlar\u0131 gibi hassas bilgileri asla do\u011frudan koda g\u00f6mmeyin. Ortam de\u011fi\u015fkenleri, g\u00fcvenli yap\u0131land\u0131rma dosyalar\u0131 (<code>.ini<\/code> veya <code>.env<\/code> k\u00fct\u00fcphaneleri ile okunur) veya bir gizli y\u00f6netim sistemi (AWS Secrets Manager, HashiCorp Vault) kullan\u0131n.<\/li>\n<li><strong>Eri\u015fim \u0130zinleri:<\/strong> Scriptin \u00e7al\u0131\u015ft\u0131\u011f\u0131 kullan\u0131c\u0131n\u0131n sadece gerekli dosyalara ve dizinlere eri\u015fim izni oldu\u011fundan emin olun (Least Privilege Prensibi).<\/li>\n<li><strong>\u015eifreli Ba\u011flant\u0131lar:<\/strong> M\u00fcmk\u00fcn oldu\u011funda FTP yerine SFTP, FTPS veya HTTPS tabanl\u0131 bulut API'lerini tercih edin. Bu protokoller verileri aktar\u0131m s\u0131ras\u0131nda \u015fifreler.<\/li>\n<li><strong>Girdi Do\u011frulama:<\/strong> E\u011fer script kullan\u0131c\u0131dan veya bir yap\u0131land\u0131rma dosyas\u0131ndan dizin yollar\u0131 gibi girdi al\u0131yorsa, dizin ge\u00e7i\u015fi (path traversal) sald\u0131r\u0131lar\u0131n\u0131 \u00f6nlemek i\u00e7in bu girdileri dikkatlice do\u011frulay\u0131n.<\/li>\n<\/ol>\n<div class=\"info-box\">\n<p>Bilgi Notu: Bir Python scripti do\u011frudan mobil uyumlu olmazken, scriptin \u00fcretti\u011fi raporlar\u0131 veya bir web aray\u00fcz\u00fc \u00fczerinden tetiklenen bu t\u00fcr otomasyonun sonu\u00e7lar\u0131n\u0131 mobil cihazlarda g\u00f6r\u00fcnt\u00fclenebilir k\u0131lmak \u00f6nemlidir. Bunun i\u00e7in web aray\u00fczleri geli\u015ftirirken CSS media query'leri gibi teknikler kullan\u0131l\u0131r:<\/p>\n<pre><code class=\"language-css\">\n\/* Genel stil *\/\nbody {\n    font-family: Arial, sans-serif;\n    margin: 0;\n    padding: 20px;\n}\n\n.container {\n    max-width: 1200px;\n    margin: 0 auto;\n    padding: 20px;\n    background-color: #f9f9f9;\n    box-shadow: 0 0 10px rgba(0,0,0,0.1);\n}\n\n\/* Mobil cihazlar i\u00e7in stil (768px'den k\u00fc\u00e7\u00fck ekranlar) *\/\n@media (max-width: 768px) {\n    .container {\n        width: 100%; \/* Tam geni\u015flik *\/\n        padding: 15px; \/* Daha az dolgu *\/\n        box-shadow: none; \/* G\u00f6lgeyi kald\u0131r *\/\n    }\n\n    h2 {\n        font-size: 1.5em; \/* Ba\u015fl\u0131k boyutunu k\u00fc\u00e7\u00fclt *\/\n    }\n\n    p {\n        font-size: 0.9em; \/* Paragraf metin boyutunu k\u00fc\u00e7\u00fclt *\/\n    }\n}\n<\/pre>\n<p><\/code>\n    <\/div>\n<p>Bu ipu\u00e7lar\u0131 ve optimizasyonlar, Python ile olu\u015fturdu\u011funuz dosya y\u00f6netim scriptlerinin sadece i\u015flevsel de\u011fil, ayn\u0131 zamanda sa\u011flam, g\u00fcvenli ve verimli olmas\u0131n\u0131 sa\u011flayacakt\u0131r. Otomasyon projelerinizde bu prensipleri uygulayarak daha profesyonel ve s\u00fcrd\u00fcr\u00fclebilir \u00e7\u00f6z\u00fcmler geli\u015ftirebilirsiniz.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Bu makalede, bug\u00fcn de\u011fi\u015ftirilen dosyalar\u0131 bulmak ve bunlar\u0131 otomatik olarak uzak bir sunucuya veya bulut depolama alan\u0131na y\u00fcklemek i\u00e7in g\u00fc\u00e7l\u00fc bir Python scriptinin nas\u0131l olu\u015fturulaca\u011f\u0131n\u0131 detayl\u0131 bir \u015fekilde inceledik. <code>os<\/code> ve <code>datetime<\/code> mod\u00fcllerini kullanarak dosya modifikasyon tarihlerini nas\u0131l alaca\u011f\u0131m\u0131z\u0131, bir dizin a\u011fac\u0131n\u0131 nas\u0131l tarayaca\u011f\u0131m\u0131z\u0131 ve belirli tarih kriterlerine g\u00f6re dosyalar\u0131 nas\u0131l filtreleyece\u011fimizi \u00f6\u011frendik. Ard\u0131ndan, FTP \u00fczerinden dosya y\u00fckleme s\u00fcre\u00e7lerini ve bulut depolama servisleriyle entegrasyonun temel prensiplerini g\u00f6rd\u00fck. Web sitesi g\u00fcncellemeleri, log yedekleme ve finansal rapor senkronizasyonu gibi ger\u00e7ek d\u00fcnya senaryolar\u0131yla bu otomasyonun i\u015fletmelere ve bireylere sa\u011flayabilece\u011fi somut faydalar\u0131 g\u00f6zler \u00f6n\u00fcne serdik. Son olarak, performans optimizasyonlar\u0131, hata y\u00f6netimi, zamanlanm\u0131\u015f g\u00f6revler ve g\u00fcvenlik ipu\u00e7lar\u0131 ile scriptinizi daha sa\u011flam ve g\u00fcvenli hale getirme y\u00f6ntemlerini ele ald\u0131k.<\/p>\n<p>Bu Python scripti, dosya y\u00f6netimi s\u00fcre\u00e7lerindeki manuel i\u015f y\u00fck\u00fcn\u00fc azaltarak, insan hatas\u0131 riskini minimize ederek ve operasyonel verimlili\u011fi art\u0131rarak zaman ve kaynak tasarrufu sa\u011flamak i\u00e7in g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. Otomasyonun g\u00fcc\u00fcn\u00fc kullanarak, rutin g\u00f6revleri arkan\u0131zda b\u0131rak\u0131p daha stratejik i\u015flere odaklanabilirsiniz. Bu rehberdeki bilgileri kendi projelerinize uyarlayarak, dosya y\u00f6netimini daha ak\u0131ll\u0131 ve sorunsuz hale getirme yolunda \u00f6nemli bir ad\u0131m atm\u0131\u015f olacaks\u0131n\u0131z.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<ol>\n<li>\n            <strong>Bu script sadece bug\u00fcn de\u011fi\u015fen dosyalar\u0131 m\u0131 bulur?<\/strong><\/p>\n<p>Hay\u0131r, scriptin temel mant\u0131\u011f\u0131 bug\u00fcn de\u011fi\u015ftirilen dosyalar\u0131 bulmak \u00fczerine kuruludur, ancak <code>is_file_modified_today()<\/code> fonksiyonunu kolayca de\u011fi\u015ftirebilirsiniz. \u00d6rne\u011fin, son 7 g\u00fcn i\u00e7inde de\u011fi\u015ftirilen dosyalar\u0131 bulmak i\u00e7in <code>datetime.timedelta(days=7)<\/code> kullanarak bir tarih aral\u0131\u011f\u0131 tan\u0131mlayabilir ve dosyan\u0131n modifikasyon tarihinin bu aral\u0131kta olup olmad\u0131\u011f\u0131n\u0131 kontrol edebilirsiniz.<\/p>\n<\/li>\n<li>\n            <strong>Farkl\u0131 bir tarih aral\u0131\u011f\u0131 belirleyebilir miyim?<\/strong><\/p>\n<p>Kesinlikle! <code>datetime<\/code> mod\u00fcl\u00fcn\u00fcn esnekli\u011fi sayesinde, <code>is_file_modified_today()<\/code> fonksiyonunu kolayca uyarlayabilirsiniz. \u00d6rne\u011fin, <code>mod_date.date() >= (today.date() - datetime.timedelta(days=X))<\/code> \u015feklinde bir kontrol ile son X g\u00fcn i\u00e7inde de\u011fi\u015fen dosyalar\u0131 bulabilir veya belirli bir ba\u015flang\u0131\u00e7 ve biti\u015f tarihi aral\u0131\u011f\u0131 tan\u0131mlayabilirsiniz.<\/p>\n<\/li>\n<li>\n            <strong>Dosya silme i\u015flemlerini nas\u0131l takip edebilirim?<\/strong><\/p>\n<p>Bu script do\u011frudan silme i\u015flemlerini takip etmez, sadece modifikasyon tarihlerine bakar. Silme i\u015flemlerini takip etmek i\u00e7in, dizinin mevcut durumunun bir anl\u0131k g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc (snapshot) al\u0131p, sonraki \u00e7al\u0131\u015ft\u0131rmada bu anl\u0131k g\u00f6r\u00fcnt\u00fc ile mevcut dizin durumunu kar\u015f\u0131la\u015ft\u0131rman\u0131z gerekir. Bu, genellikle bir veritaban\u0131nda veya bir \"manifest\" dosyas\u0131nda dosya yollar\u0131n\u0131 ve hash de\u011ferlerini saklayarak yap\u0131l\u0131r. Daha karma\u015f\u0131k bir s\u00fcr\u00fcm kontrol veya senkronizasyon sistemi gerektirir.<\/p>\n<\/li>\n<li>\n            <strong>Scripti otomatik \u00e7al\u0131\u015ft\u0131rmak i\u00e7in ne yapmal\u0131y\u0131m?<\/strong><\/p>\n<p>Scripti otomatik \u00e7al\u0131\u015ft\u0131rmak i\u00e7in i\u015fletim sisteminizin zamanlay\u0131c\u0131s\u0131n\u0131 kullanman\u0131z gerekir. Linux ve macOS sistemlerinde \"Cron job\" (<code>crontab -e<\/code> komutu ile), Windows sistemlerinde ise \"G\u00f6rev Zamanlay\u0131c\u0131\" (Task Scheduler) kullan\u0131larak script belirli aral\u0131klarla (\u00f6rne\u011fin her gece, her saat ba\u015f\u0131) otomatik olarak \u00e7al\u0131\u015ft\u0131r\u0131labilir.<\/p>\n<\/li>\n<li>\n            <strong>B\u00fcy\u00fck dosya setleri i\u00e7in performans sorunlar\u0131 ya\u015far m\u0131y\u0131m?<\/strong><\/p>\n<p>\u00c7ok b\u00fcy\u00fck dosya setleri (on binlerce veya y\u00fcz binlerce dosya) ve derin dizin yap\u0131lar\u0131 i\u00e7in <code>os.walk()<\/code> kullanmak performans\u0131 etkileyebilir. Bu durumda, makalede de bahsedildi\u011fi gibi <code>os.scandir()<\/code> kullanmak, dosya t\u00fcr\u00fcne g\u00f6re filtreleme yapmak veya scripti paralelle\u015ftirmek (<code>multiprocessing<\/code>) gibi optimizasyon tekniklerini uygulayarak performans\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilirsiniz. Ayr\u0131ca, dosya sisteminin kendisinin (SSD vs. HDD) ve a\u011f gecikmesinin (uzak dosya sistemleri) de performans\u0131 etkileyece\u011fini unutmay\u0131n.<\/p>\n<\/li>\n<\/ol>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"G\u00fcnl\u00fck dosya y\u00f6netiminizde kar\u0131\u015f\u0131kl\u0131k m\u0131 ya\u015f\u0131yorsunuz? Web siteniz, raporlar\u0131n\u0131z veya log dosyalar\u0131n\u0131z i\u00e7in yaln\u0131zca bug\u00fcn de\u011fi\u015ftirilen dosyalar\u0131 bulmak&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1403],"tags":[],"class_list":{"0":"post-33466","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-python","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Bug\u00fcn De\u011fi\u015fen Dosyalar\u0131 H\u0131zl\u0131ca Bulan Python Scriptiyle Dosya Y\u00fckleme Rehberi<\/title>\n<meta name=\"description\" content=\"G\u00fcnl\u00fck dosya y\u00f6netiminizde kar\u0131\u015f\u0131kl\u0131k m\u0131 ya\u015f\u0131yorsunuz? Web siteniz, raporlar\u0131n\u0131z veya log dosyalar\u0131n\u0131z i\u00e7in yaln\u0131zca bug\u00fcn de\u011fi\u015ftirilen dosyalar\u0131 bulmak ve otomatik y\u00fcklemek, verimlili\u011finizi \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir. Bu rehber, Python ile bu s\u00fcreci nas\u0131l otomatikle\u015ftirece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/bugun-degisen-dosyalari-hizlica-bulan-python-scriptiyle-dosya-yukleme-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Bug\u00fcn De\u011fi\u015fen Dosyalar\u0131 H\u0131zl\u0131ca Bulan Python Scriptiyle Dosya Y\u00fckleme Rehberi\" \/>\n<meta property=\"og:description\" content=\"G\u00fcnl\u00fck dosya y\u00f6netiminizde kar\u0131\u015f\u0131kl\u0131k m\u0131 ya\u015f\u0131yorsunuz? Web siteniz, raporlar\u0131n\u0131z veya log dosyalar\u0131n\u0131z i\u00e7in yaln\u0131zca bug\u00fcn de\u011fi\u015ftirilen dosyalar\u0131 bulmak ve otomatik y\u00fcklemek, verimlili\u011finizi \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir. Bu rehber, Python ile bu s\u00fcreci nas\u0131l otomatikle\u015ftirece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/bugun-degisen-dosyalari-hizlica-bulan-python-scriptiyle-dosya-yukleme-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-03T03:31:21+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"28 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/bugun-degisen-dosyalari-hizlica-bulan-python-scriptiyle-dosya-yukleme-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/bugun-degisen-dosyalari-hizlica-bulan-python-scriptiyle-dosya-yukleme-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Bug\u00fcn De\u011fi\u015fen Dosyalar\u0131 H\u0131zl\u0131ca Bulan Python Scriptiyle Dosya Y\u00fckleme Rehberi\",\"datePublished\":\"2025-11-03T03:31:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/bugun-degisen-dosyalari-hizlica-bulan-python-scriptiyle-dosya-yukleme-rehberi\/\"},\"wordCount\":4113,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Python\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/bugun-degisen-dosyalari-hizlica-bulan-python-scriptiyle-dosya-yukleme-rehberi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/bugun-degisen-dosyalari-hizlica-bulan-python-scriptiyle-dosya-yukleme-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/bugun-degisen-dosyalari-hizlica-bulan-python-scriptiyle-dosya-yukleme-rehberi\/\",\"name\":\"Bug\u00fcn De\u011fi\u015fen Dosyalar\u0131 H\u0131zl\u0131ca Bulan Python Scriptiyle Dosya Y\u00fckleme Rehberi\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-03T03:31:21+00:00\",\"description\":\"G\u00fcnl\u00fck dosya y\u00f6netiminizde kar\u0131\u015f\u0131kl\u0131k m\u0131 ya\u015f\u0131yorsunuz? Web siteniz, raporlar\u0131n\u0131z veya log dosyalar\u0131n\u0131z i\u00e7in yaln\u0131zca bug\u00fcn de\u011fi\u015ftirilen dosyalar\u0131 bulmak ve otomatik y\u00fcklemek, verimlili\u011finizi \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir. Bu rehber, Python ile bu s\u00fcreci nas\u0131l otomatikle\u015ftirece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/bugun-degisen-dosyalari-hizlica-bulan-python-scriptiyle-dosya-yukleme-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/bugun-degisen-dosyalari-hizlica-bulan-python-scriptiyle-dosya-yukleme-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/bugun-degisen-dosyalari-hizlica-bulan-python-scriptiyle-dosya-yukleme-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Bug\u00fcn De\u011fi\u015fen Dosyalar\u0131 H\u0131zl\u0131ca Bulan Python Scriptiyle Dosya Y\u00fckleme Rehberi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Bug\u00fcn De\u011fi\u015fen Dosyalar\u0131 H\u0131zl\u0131ca Bulan Python Scriptiyle Dosya Y\u00fckleme Rehberi","description":"G\u00fcnl\u00fck dosya y\u00f6netiminizde kar\u0131\u015f\u0131kl\u0131k m\u0131 ya\u015f\u0131yorsunuz? Web siteniz, raporlar\u0131n\u0131z veya log dosyalar\u0131n\u0131z i\u00e7in yaln\u0131zca bug\u00fcn de\u011fi\u015ftirilen dosyalar\u0131 bulmak ve otomatik y\u00fcklemek, verimlili\u011finizi \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir. Bu rehber, Python ile bu s\u00fcreci nas\u0131l otomatikle\u015ftirece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/bugun-degisen-dosyalari-hizlica-bulan-python-scriptiyle-dosya-yukleme-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"Bug\u00fcn De\u011fi\u015fen Dosyalar\u0131 H\u0131zl\u0131ca Bulan Python Scriptiyle Dosya Y\u00fckleme Rehberi","og_description":"G\u00fcnl\u00fck dosya y\u00f6netiminizde kar\u0131\u015f\u0131kl\u0131k m\u0131 ya\u015f\u0131yorsunuz? Web siteniz, raporlar\u0131n\u0131z veya log dosyalar\u0131n\u0131z i\u00e7in yaln\u0131zca bug\u00fcn de\u011fi\u015ftirilen dosyalar\u0131 bulmak ve otomatik y\u00fcklemek, verimlili\u011finizi \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir. Bu rehber, Python ile bu s\u00fcreci nas\u0131l otomatikle\u015ftirece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.","og_url":"https:\/\/fatihsoysal.com\/blog\/bugun-degisen-dosyalari-hizlica-bulan-python-scriptiyle-dosya-yukleme-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-03T03:31:21+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"28 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/bugun-degisen-dosyalari-hizlica-bulan-python-scriptiyle-dosya-yukleme-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/bugun-degisen-dosyalari-hizlica-bulan-python-scriptiyle-dosya-yukleme-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Bug\u00fcn De\u011fi\u015fen Dosyalar\u0131 H\u0131zl\u0131ca Bulan Python Scriptiyle Dosya Y\u00fckleme Rehberi","datePublished":"2025-11-03T03:31:21+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/bugun-degisen-dosyalari-hizlica-bulan-python-scriptiyle-dosya-yukleme-rehberi\/"},"wordCount":4113,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Python"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/bugun-degisen-dosyalari-hizlica-bulan-python-scriptiyle-dosya-yukleme-rehberi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/bugun-degisen-dosyalari-hizlica-bulan-python-scriptiyle-dosya-yukleme-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/bugun-degisen-dosyalari-hizlica-bulan-python-scriptiyle-dosya-yukleme-rehberi\/","name":"Bug\u00fcn De\u011fi\u015fen Dosyalar\u0131 H\u0131zl\u0131ca Bulan Python Scriptiyle Dosya Y\u00fckleme Rehberi","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-03T03:31:21+00:00","description":"G\u00fcnl\u00fck dosya y\u00f6netiminizde kar\u0131\u015f\u0131kl\u0131k m\u0131 ya\u015f\u0131yorsunuz? Web siteniz, raporlar\u0131n\u0131z veya log dosyalar\u0131n\u0131z i\u00e7in yaln\u0131zca bug\u00fcn de\u011fi\u015ftirilen dosyalar\u0131 bulmak ve otomatik y\u00fcklemek, verimlili\u011finizi \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir. Bu rehber, Python ile bu s\u00fcreci nas\u0131l otomatikle\u015ftirece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/bugun-degisen-dosyalari-hizlica-bulan-python-scriptiyle-dosya-yukleme-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/bugun-degisen-dosyalari-hizlica-bulan-python-scriptiyle-dosya-yukleme-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/bugun-degisen-dosyalari-hizlica-bulan-python-scriptiyle-dosya-yukleme-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Bug\u00fcn De\u011fi\u015fen Dosyalar\u0131 H\u0131zl\u0131ca Bulan Python Scriptiyle Dosya Y\u00fckleme Rehberi"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33466","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=33466"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33466\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=33466"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=33466"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=33466"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}