Üst düzey İndirilenler dosyalarını uzantı klasörlerine ayırmak için doğrudan dosyaları inceleyen, txt ve csv gibi klasörler oluşturan ve mevcut hedef adlarını atlayan bir betik kullanın. Aşağıdaki geçici örnekle başlayın, taşıma işlemlerini önizleyin, ardından betiği Terminal’den veya Apple Shortcuts’tan çalıştırın.
Bu kılavuz, mevcut alt klasörleri ve içeriklerini olduğu gibi bırakırken dağınık dosyaları fiziksel olarak klasörlere taşımak isteyen bir Mac kullanıcısı içindir. Başlıca karar desteği bir önizleme raporudur: uygun her dosya için önerilen bir hedef gösterilir; çakışmalar ve desteklenmeyen adlar ise açık bir atlama mesajıyla belirtilir.
Neler taşınacak, neler yerinde kalacak?
Finder; sıralama ve gruplama denetimlerinin yanı sıra klasörler ve Akıllı Klasörler sunar. Apple, Akıllı Klasör’ün eşleşen dosyaları taşımadan bir arada gösterdiğini açıklar. Bu görevde istenen sonuç, taşınmış dosyaları içeren gerçek uzantı klasörleridir. Mac’te dosyalarınızı Finder’da düzenleme.
Örneği incelemeden önce Finder’ı açıp Finder > Ayarlar > İleri Düzey seçeneğine gidin ve Tüm dosya uzantılarını göster seçeneğini belirleyin. Böylece ayırıcının kullandığı sonekler görünür olur. Bir uzantıyı göstermek dosyanın biçimini değiştirmez. Mac’te dosya adı uzantılarını gösterme veya gizleme.
Aşağıdaki betik, bilinçli olarak belirlenmiş şu kuralları kullanır. Bunlar, bu uygulamanın davranışını açıklar; Finder veya Shortcuts’ın evrensel davranışını değil:
| Karşılaşılan öğe | Ayırıcının davranışı |
|---|---|
note.TXT gibi sıradan, doğrudan bir dosya |
txt/note.TXT hedefini önerir; özgün dosya adını korur |
bundle.tar.gz gibi bileşik bir ad |
Son soneki kullanır: gz/bundle.tar.gz |
| Nokta içermeyen veya noktayla biten dosya | Yerinde bırakır ve atlama mesajı verir |
| Uzantı içeren adla adlandırılmış olsa bile bir klasör | Kendisi ve içerikleri yerinde bırakılır |
| Noktayla başlayan bir ad | Taramaya dahil edilmez |
| Sembolik bağlantı | Yerinde bırakılır |
| ASCII harfleri ve rakamları dışında karakter içeren veya 32 karakterden uzun bir uzantı | Yerinde bırakır ve atlama mesajı verir |
| Aynı dosya adına sahip mevcut bir hedef | Kaynak yerinde bırakılır ve çakışma mesajı verilir |
| Normal bir dosya ya da sembolik bağlantı tarafından işgal edilmiş hedef klasör adı | Engellenen klasör bildirilir ve kaynak yerinde bırakılır |
Uzantı kısıtlamaları, klasör adlandırma kuralını basit ve öngörülebilir tutar. Atlanan dosya elle karar verilebilmesi için kullanılabilir durumda kalır; betik yeni bir ad uydurmaz veya dosyayı sessizce silmez.
Geçici bir İndirilenler örneği oluşturma
Terminal’i açın ve aşağıdaki kurulum bloğunun tamamını yapıştırın. Bu blok, yalnızca Downloads/ExtensionSortDemo içinde sentetik metin dosyaları oluşturur. Bunlardan bazılarında .gz gibi örnek uzantılar bulunur; içerikleri bu biçimlere ait örnekler değil, düz örnek metinlerdir. Demo klasörü zaten varsa kurulum durur; böylece bloğu yeniden çalıştırmak önceki testi sıfırlamaz.
Apple, Terminal’i komutları ve kabuk betiklerini çalıştırmanın bir yolu olarak, mv öğesini de yerel dosyaları taşımak için kullanmayı belgeler. Burada Terminal, her planlanan taşımayı gerçekleştirmeden önce önizlemenin okunaklı bir yolunu sunar. Mac’te Terminal nedir?, Mac’te Terminal’de dosyaları yönetme.
/bin/bash <<'BASH'
set -eu
demo="$HOME/Downloads/ExtensionSortDemo"
/bin/mkdir "$demo"
/bin/mkdir "$demo/nested" "$demo/txt"
printf 'sample text\n' > "$demo/sample.txt"
printf 'uppercase suffix example\n' > "$demo/note.TXT"
printf 'name,value\nblue,1\n' > "$demo/palette.csv"
printf 'synthetic compound-name example\n' > "$demo/bundle.tar.gz"
printf 'no extension example\n' > "$demo/README"
printf 'trailing dot example\n' > "$demo/trailing."
printf 'hidden example\n' > "$demo/.hidden.txt"
printf 'nested example\n' > "$demo/nested/inside.txt"
printf 'existing destination example\n' > "$demo/txt/sample.txt"
printf 'blocks creation of a csv folder\n' > "$demo/csv"
printf 'Created demo folder: %s\n' "$demo"
BASH
Finder’da İndirilenler’i, ardından ExtensionSortDemo klasörünü açın. Adları sample.txt olan iki farklı dosyaya dikkat edin: biri demo klasörünün en üst düzeyinde, diğeri ise zaten txt içinde. Ayrıca csv öğesinin bir dosya olduğunu fark edin. Bunlar, bir taşıma işleminin atlanması için yaygın iki nedeni sınamak üzere bilerek oluşturulmuştur.
Dosyaları taşımadan önce ayırıcıyı önizleme
Aşağıdaki programın tamamını Terminal’e yapıştırın. Başlangıç ayarı mode=preview olduğundan uzantı klasörleri oluşturmadan veya dosyaları taşımadan önerilen taşımaları bildirir. Yapılandırılmış kök klasör, İndirilenler’in tamamı değil, geçici demo klasörüdür.
/bin/bash <<'BASH'
set -u
export LC_ALL=C
unset GLOBIGNORE
shopt -s nullglob
shopt -u dotglob
root="$HOME/Downloads/ExtensionSortDemo"
mode=preview
case "$mode" in
preview|move) ;;
*) printf 'Invalid mode\n' >&2; exit 1 ;;
esac
if [ ! -d "$root" ] || [ -L "$root" ]; then
printf 'Root must be an existing ordinary folder\n' >&2
exit 1
fi
for file in "$root"/*; do
if [ -L "$file" ] || [ ! -f "$file" ]; then
printf 'SKIP non-regular: %q\n' "$file"
continue
fi
name=${file##*/}
case "$name" in
*.*) ext=${name##*.} ;;
*) printf 'SKIP no extension: %q\n' "$name"; continue ;;
esac
case "$ext" in
''|*[!A-Za-z0-9]*)
printf 'SKIP unsupported extension: %q\n' "$name"
continue ;;
esac
if [ "${#ext}" -gt 32 ]; then
printf 'SKIP long extension: %q\n' "$name"
continue
fi
ext=$(printf '%s' "$ext" | /usr/bin/tr '[:upper:]' '[:lower:]')
folder="$root/$ext"
dest="$folder/$name"
if [ -L "$folder" ] || { [ -e "$folder" ] && [ ! -d "$folder" ]; }; then
printf 'SKIP blocked folder: %q\n' "$folder"
continue
fi
if [ -e "$dest" ] || [ -L "$dest" ]; then
printf 'SKIP collision: %q\n' "$dest"
continue
fi
if [ "$mode" = preview ]; then
printf 'WOULD MOVE %q -> %q\n' "$file" "$dest"
continue
fi
/bin/mkdir -p "$folder" || exit 1
/bin/mv -n "$file" "$dest" || exit 1
if [ -e "$file" ] || [ -L "$file" ]; then
printf 'NOT MOVED: %q\n' "$file" >&2
exit 1
fi
printf 'MOVED %q -> %q\n' "$file" "$dest"
done
printf 'Finished (%s). Review all SKIP lines.\n' "$mode"
BASH
Doğrudan alt öğeler için kullanılan "$root"/* kalıbı dizinlerin içine girmez. Ardından yapılan dosya kontrolleri dizinleri ve sembolik bağlantıları dışarıda bırakır. nullglob, eşleşmeyen bir kalıbın dosya adı olarak değerlendirilmesine yol açmadan boş klasörleri işler; dotglob seçeneğinin devre dışı bırakılması, noktayla başlayan adları dışarıda tutar. Bu davranışlar Apple’ın dağıttığı Bash kılavuzunda belgelenmiştir. Bash kılavuzu.
Betik son soneki çıkarır ve harflerini tr ile küçük harfe dönüştürür. Bu nedenle note.TXT dosya adını korur, ancak txt klasörüne gider. Apple’ın tr kılavuzu, burada kullanılan büyük harften küçük harfe karakter eşlemesini belgeler. tr(1) — karakterleri dönüştürme.
Bu örnek için beklenen önemli sonuçlar şunlardır:
| Sentetik kaynak | Beklenen önizleme sonucu |
|---|---|
note.TXT |
txt/note.TXT konumuna taşınması önerilir |
bundle.tar.gz |
gz/bundle.tar.gz ile çakışma; atla |
sample.txt |
txt/sample.txt ile çakışma; atla |
palette.csv |
csv klasör adı bir dosya tarafından engelleniyor; atla |
README |
Uzantı yok; atla |
trailing. |
Uzantı boş; atla |
nested/inside.txt |
Hiç incelenmez |
.hidden.txt |
Hiç incelenmez |
Bunlar beklenen dosya sistemi sonuçlarıdır; hazırlık sırasında taşıma işlemlerinin yürütüldüğü iddiası değildir. Program Bash söz dizimi denetimini geçti ve ayrı, belirleyici bir dosya adı eşleme denetimi sonek çıkarımını ve küçük harfe dönüştürmeyi doğruladı. Hazırlık ortamı salt okunurdu; bu nedenle macOS’taki taşıma iş akışının tamamı çalıştırılmadı.
Örnek dosyaları taşıma ve sonucu denetleme
Önizleme tablodakiyle eşleştiğinde aynı programın tamamını yeniden yapıştırın; yalnızca mode=preview değerini mode=move olarak değiştirin. Bu test için demo kök klasörünü değiştirmeyin.
Taşıma modunda mkdir -p, gerekli klasörü oluşturur veya mevcut bir dizini kullanır. Mevcut sıradan bir dosyayı klasöre dönüştürmez; bu nedenle betik önce hedef klasörü denetler. mkdir(1) — dizin oluşturma.
Taşıma işlemi, belgelenen davranışı mevcut dosyanın üzerine yazmamak olan macOS mv -n komutunu kullanır. Önceki varlık denetimi okunaklı bir çakışma raporu sağlar; sonraki kaynak denetimi ise kaynağı geride bırakan bir taşıma işlemini yakalar. Komut hatası bildirilirse program durur. mv(1) — dosyaları taşıma.
Demo klasörünü Finder’da denetleyin. note.TXT öğesini txt içinde, bundle.tar.gz öğesini ise yeni oluşturulan gz klasörünün içinde bulmalısınız. sample.txt öğesinin her iki sürümü de özgün konumlarında bulunmaya devam etmelidir. palette.csv en üst düzeyde kalmalı, nested/inside.txt ise nested içinde kalmalıdır.
Son Finished satırı taramanın tamamlandığı anlamına gelir; atlama mesajlarını da gözden geçirin. Ayırıcıyı yeniden çalıştırdığınızda, klasörler yinelemeli taranmadığı için sıralanmış dosyalar kendi klasörlerinde kalmalıdır.
Aynı ayırıcıyı Apple Shortcuts’tan çalıştırma
Shortcuts, bu betik için bir düğme işlevi görebilir. Apple, Shortcuts düzenleyicisinde kabuk betikleri yazma ve çalıştırma desteğini belgeler. Uzantı eşlemesini ve varlık denetimlerini kabuk programı yapar; bu makale, yerel bir dosya taşıma işleminin aynı çakışma davranışını gösterdiğini varsaymaz. macOS için Shortcuts’ı keşfedin.
Kısayolu elle oluşturun ve test sırasında demo klasörünü hedefte tutun:
- Shortcuts’ı açın, ekleme düğmesine tıklayın ve kısayola
Sort Extension Demoadını verin. - Eylem listesinde
Run Shell Scriptaraması yapın ve bu eylemi ekleyin. - Kabuk olarak
/bin/bashseçin. Açılıştaki/bin/bashsatırı ve sondakiBASHayıracı dahil olmak üzere yukarıdaki ayırıcı bloğunun tamamını betik alanına yapıştırın. Başlangıçtamode=previewdeğerini koruyun. - Betik eyleminden sonra
Quick Lookekleyin ve bu eylemi betiğin çıktısına bağlayın. - Kısayolu çalıştırıp betiği
mode=moveolarak değiştirmeden önce önizleme raporunu inceleyin.
Apple, eylemler ekleyerek ve kısayolu deneyerek kısayol oluşturmayı belgeler; eylemler arasında aktarılan içeriği incelemek için Quick Look kullanılmasını önerir. Mac’te özel bir kısayol oluşturma, Mac’te Shortcuts eylemlerinizi test etme.
Bu kısayol, betik içinde bir kök yol tanımlandığı için kendisine dosya aktarılmasını gerektirmez. Başarılı çıktısı, Quick Look ile görüntülenen bir metin raporudur. Bu rapor, başka bir dosya eylemine aktarılacak taşınmış dosya nesnelerinden oluşan bir koleksiyon değildir. Apple’ın da belirttiği gibi, yüklü sürümünüzde bir eylemin kabul ettiği girdiyi ve ortaya çıkan çıktıyı incelemek için simgesine Control tuşuna basarak tıklayın ve Bilgi Ver seçeneğini belirleyin. Mac’te Shortcuts eylem listesinde gezinme.
Shortcuts betik çalıştırmanın etkinleştirilmesini gerektiriyorsa Apple’ın belgelediği ayar Shortcuts > Settings > Advanced > Allow Running Scripts seçeneğidir. Kabuk eylemi yüklemenizde bulunmuyorsa yukarıdaki Terminal programının tamamını kullanın; aynı sıralama görevini bağımsız olarak gerçekleştirir. Mac’te Shortcuts’ın gelişmiş gizlilik ve güvenlik ayarları.
Kuralı üst düzey İndirilenler dosyalarına uygulama
Geçici testten sonra, gerçek İndirilenler klasörüne geçmek için ayırıcıdaki şu tek satırı değiştirin. Bu, tek başına bir sıralama programı değil, bir yapılandırma parçasıdır:
root="$HOME/Downloads"
Kök klasörü her değiştirdiğinizde mode=preview satırına dönün. Taşıma işlemlerini etkinleştirmeden önce önerilen tüm hedefleri ve atlama mesajlarını gözden geçirin. Program uygun doğrudan dosyaları topluca işler; tek tek seçim istemi sunmaz.
Dosyaların klasöre gelmesi tamamlandıktan sonra elle başlatılan bir toplu işlem olarak kullanın. Betik indirmelerin tamamlanıp tamamlanmadığını belirlemez, yeni eklemeleri izlemez veya eşzamanlı çalıştırmaları koordine etmez. Denetimler ve taşıma işlemi ayrı adımlardır; çalışırken başka dosya taşıma işlemlerinin klasörde yapılmasına izin vermeyin. Önizleme, mevcut durumun raporudur; hedefleri ayırmaz.
Çakışma olduğunda Finder’da iki dosyayı inceleyip üst düzeydeki dosyayı yeniden adlandırmaya veya olduğu yerde bırakmaya karar verin. Uzantı klasörü engellendiğinde yeniden çalıştırmadan önce bu klasör adını işgal eden öğeyi çözümleyin. Her iki durumda da programı dosyaların üzerine yazacak şekilde değiştirmeniz gerekmez.
Son olarak Finder’da gerçek hedef klasörleri denetleyin ve üst düzeyde kalan dosyaları raporla karşılaştırın. Geçici örnek somut bir kabul testi sağlar: amaçlanan dosyalar taşınır, mevcut adlar korunur ve iç içe içerikler başladıkları yerde kalır.
Kaynaklar
- Mac’te dosyalarınızı Finder’da düzenleme — Apple Support.
- Mac’te dosya adı uzantılarını gösterme veya gizleme — Apple Support.
- Mac’te Terminal nedir? — Apple Support.
- Mac’te Terminal’de dosyaları yönetme — Apple Support.
- Bash kılavuzu — Apple OSS Distributions.
- tr(1) — karakterleri dönüştürme — Apple OSS Distributions.
- mkdir(1) — dizin oluşturma — Apple OSS Distributions.
- mv(1) — dosyaları taşıma — Apple OSS Distributions.
- macOS için Shortcuts’ı keşfedin — Apple Developer.
- Mac’te özel bir kısayol oluşturma — Apple Support.
- Mac’te Shortcuts eylemlerinizi test etme — Apple Support.
- Mac’te Shortcuts eylem listesinde gezinme — Apple Support.
- Mac’te Shortcuts’ın gelişmiş gizlilik ve güvenlik ayarları — Apple Support.