Untuk mengurutkan file Unduhan tingkat teratas ke dalam folder ekstensi, gunakan skrip yang memeriksa file langsung, membuat folder seperti txt dan csv, serta melewati nama tujuan yang sudah ada. Mulailah dengan contoh sementara di bawah ini, pratinjau pemindahannya, lalu jalankan dari Terminal atau Pintasan Apple.
Panduan ini ditujukan bagi pengguna Mac yang ingin memindahkan file lepas ke dalam folder secara fisik, sambil membiarkan subfolder yang sudah ada beserta isinya tetap utuh. Panduan ini menggunakan laporan pratinjau sebagai alat bantu pengambilan keputusan utama: setiap file yang memenuhi syarat mendapat tujuan yang diusulkan, sedangkan konflik dan nama yang tidak didukung mendapat pesan lewati yang jelas.
Apa yang akan dipindahkan, dan apa yang akan tetap di tempatnya?
Finder menyediakan kontrol pengurutan dan pengelompokan, serta folder dan Folder Pintar. Apple menjelaskan bahwa Folder Pintar menampilkan file yang cocok secara bersamaan tanpa memindahkannya. Untuk tugas ini, hasil yang diinginkan adalah folder ekstensi nyata yang berisi file-file yang telah dipindahkan. Mengatur file di Finder pada Mac.
Sebelum memeriksa contoh, buka Finder dan pilih Finder > Pengaturan > Lanjutan, lalu pilih Tampilkan semua ekstensi nama file. Ini membuat akhiran yang digunakan pengurut terlihat. Menampilkan ekstensi tidak mengubah format file. Menampilkan atau menyembunyikan ekstensi nama file di Mac.
Skrip di bawah ini menggunakan aturan yang ditetapkan secara sengaja. Aturan ini menjelaskan implementasi ini, bukan perilaku Finder atau Pintasan yang berlaku universal:
| Item yang ditemukan | Perilaku pengurut |
|---|---|
File biasa yang berada langsung di folder, seperti note.TXT |
Mengusulkan txt/note.TXT; mempertahankan nama file asli |
Nama gabungan seperti bundle.tar.gz |
Menggunakan akhiran terakhir: gz/bundle.tar.gz |
| File tanpa titik, atau yang diakhiri titik | Membiarkannya di tempat dan melaporkan bahwa file dilewati |
| Folder, termasuk folder yang namanya menggunakan ekstensi | Membiarkannya beserta isinya di tempat |
| Nama yang diawali titik | Mengecualikannya dari pemindaian |
| Tautan simbolis | Membiarkannya di tempat |
| Ekstensi yang berisi karakter selain huruf dan angka ASCII, atau lebih dari 32 karakter | Membiarkannya di tempat dan melaporkan bahwa file dilewati |
| Tujuan yang sudah ada dengan nama file yang sama | Membiarkan sumber di tempat dan melaporkan konflik |
| Nama folder tujuan yang sudah ditempati file biasa atau tautan simbolis | Melaporkan folder terhalang dan membiarkan sumber di tempat |
Pembatasan ekstensi membuat aturan penamaan folder sederhana dan mudah diprediksi. File yang dilewati tetap tersedia untuk diputuskan secara manual; skrip tidak membuat nama pengganti atau menghapusnya diam-diam.
Membuat contoh Unduhan sementara
Buka Terminal dan tempel blok penyiapan lengkap berikut. Blok ini hanya membuat file teks sintetis di dalam Downloads/ExtensionSortDemo. Beberapa file memiliki ekstensi ilustratif seperti .gz; isinya berupa teks contoh biasa, bukan contoh format tersebut. Penyiapan akan berhenti jika folder demo itu sudah ada, sehingga menjalankannya lagi tidak akan mengatur ulang pengujian sebelumnya.
Apple mendokumentasikan Terminal sebagai cara untuk menjalankan perintah dan skrip shell, serta mendokumentasikan mv untuk memindahkan file lokal. Di sini, Terminal menyediakan cara yang mudah dibaca untuk mempratinjau setiap pemindahan yang direncanakan sebelum melakukannya. Apa itu Terminal di Mac?, Mengelola file di Terminal pada Mac.
/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
Buka Unduhan di Finder, lalu buka ExtensionSortDemo. Perhatikan dua file berbeda bernama sample.txt: satu berada langsung di folder demo dan satu lagi sudah berada di dalam txt. Perhatikan juga bahwa csv adalah sebuah file. Ini adalah pengujian sengaja untuk dua alasan umum yang membuat pemindahan harus dilewati.
Mempratinjau pengurut sebelum memindahkan file
Tempel program lengkap di bawah ini ke Terminal. Pengaturan awalnya adalah mode=preview, sehingga program melaporkan pemindahan yang diusulkan tanpa membuat folder ekstensi atau memindahkan file. Folder root yang dikonfigurasi adalah folder demo sementara, bukan seluruh folder Unduhan.
/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
Pola anak langsung \"$root\"/* tidak menelusuri direktori. Pemeriksaan file kemudian mengecualikan direktori dan tautan simbolis. nullglob menangani folder kosong tanpa menganggap pola yang tidak cocok sebagai nama file; menonaktifkan dotglob mengecualikan nama yang diawali titik. Perilaku ini didokumentasikan dalam manual Bash yang didistribusikan Apple. Manual Bash.
Skrip mengekstrak akhiran terakhir dan mengubah hurufnya menjadi huruf kecil dengan tr. Karena itu, note.TXT mempertahankan nama filenya, tetapi masuk ke txt. Manual tr dari Apple mendokumentasikan pemetaan karakter huruf besar ke huruf kecil yang digunakan di sini. tr(1) — menerjemahkan karakter.
Untuk data contoh ini, hasil yang diharapkan dan penting adalah:
| Sumber sintetis | Hasil pratinjau yang diharapkan |
|---|---|
note.TXT |
Akan dipindahkan ke txt/note.TXT |
bundle.tar.gz |
Akan dipindahkan ke gz/bundle.tar.gz |
sample.txt |
Konflik dengan txt/sample.txt; lewati |
palette.csv |
Nama folder csv terhalang oleh sebuah file; lewati |
README |
Tidak ada ekstensi; lewati |
trailing. |
Ekstensi kosong; lewati |
nested/inside.txt |
Tidak pernah diperiksa |
.hidden.txt |
Tidak pernah diperiksa |
Ini adalah hasil sistem file yang diharapkan, bukan klaim bahwa pemindahan telah dijalankan selama persiapan. Program lolos pemeriksaan sintaks Bash, dan pemeriksaan pemetaan nama file deterministik yang terpisah mengonfirmasi ekstraksi akhiran serta konversi ke huruf kecil. Lingkungan persiapan ini bersifat hanya-baca, sehingga alur pemindahan lengkap di macOS tidak dijalankan.
Memindahkan file contoh dan memeriksa hasilnya
Setelah pratinjau sesuai dengan tabel, tempel lagi program lengkap yang sama dengan hanya mengubah mode=preview menjadi mode=move. Untuk pengujian ini, biarkan folder root demo tetap sama.
Dalam mode pemindahan, mkdir -p membuat folder yang diperlukan atau menggunakan direktori yang sudah ada. Perintah ini tidak mengubah file biasa yang sudah ada menjadi folder, itulah sebabnya skrip memeriksa folder tujuan terlebih dahulu. mkdir(1) — membuat direktori.
Pemindahan menggunakan mv -n di macOS, yang perilaku terdokumentasinya adalah menghindari penimpaan file yang sudah ada. Pemeriksaan keberadaan sebelumnya memberikan laporan konflik yang mudah dipahami; pemeriksaan sumber sesudahnya menangkap kondisi ketika file sumber masih tertinggal setelah pemindahan. Program berhenti jika terjadi kegagalan perintah yang dilaporkan. mv(1) — memindahkan file.
Periksa demo di Finder. Anda seharusnya menemukan note.TXT di dalam txt, dan bundle.tar.gz di dalam folder gz yang baru dibuat. Kedua versi sample.txt seharusnya tetap ada di lokasi asalnya. palette.csv seharusnya tetap berada langsung di folder teratas, dan nested/inside.txt seharusnya tetap berada di dalam nested.
Baris akhir Finished berarti pemindaian telah selesai; periksa juga pesan yang menjelaskan file dilewati. Jika pengurut dijalankan lagi, file yang sudah diurutkan akan tetap berada di dalam foldernya karena folder-folder itu tidak dipindai secara rekursif.
Menjalankan pengurut yang sama dari Pintasan Apple
Pintasan dapat digunakan sebagai tombol untuk skrip ini. Apple mendokumentasikan dukungan bawaan untuk menulis dan menjalankan skrip shell di editor Pintasan. Program shell melakukan pemetaan ekstensi dan pemeriksaan keberadaan; artikel ini tidak mengasumsikan bahwa tindakan pemindahan file bawaan memiliki perilaku konflik yang sama. Mengenal Pintasan untuk macOS.
Buat pintasan secara manual dan arahkan ke folder demo selama pengujian:
- Buka Pintasan, klik tombol tambah, lalu beri nama pintasan
Demo Pengurut Ekstensi. - Cari
Jalankan Skrip Shelldi daftar tindakan, lalu tambahkan tindakan itu. - Atur shell ke
/bin/bash. Tempel seluruh blok pengurut di atas, termasuk baris pembuka/bin/bashdan pembatas akhirBASH, ke kolom skrip. Awalnya, biarkanmode=preview. - Tambahkan
Lihat Cepatsetelah tindakan skrip dan hubungkan ke keluaran skrip. - Jalankan pintasan dan periksa laporan pratinjau sebelum mengubah skrip menjadi
mode=move.
Apple mendokumentasikan cara membuat pintasan dengan menambahkan tindakan dan mengujinya, serta merekomendasikan Lihat Cepat untuk memeriksa konten yang diteruskan antar tindakan. Membuat pintasan khusus di Mac, Menguji tindakan di Pintasan pada Mac.
Pintasan ini tidak memerlukan file masukan: jalur root ditetapkan di dalam skrip. Keluaran yang berhasil berupa laporan teks, yang ditampilkan oleh Lihat Cepat. Laporan itu bukan kumpulan objek file yang telah dipindahkan untuk diteruskan ke tindakan file lainnya. Untuk memeriksa masukan yang diterima dan keluaran yang dihasilkan oleh suatu tindakan pada versi yang terpasang, Control-klik ikonnya dan pilih Tampilkan Info, sebagaimana didokumentasikan Apple. Menavigasi daftar tindakan di Pintasan pada Mac.
Jika Pintasan mengharuskan eksekusi skrip diaktifkan, pengaturan yang didokumentasikan Apple adalah Pintasan > Pengaturan > Lanjutan > Izinkan Menjalankan Skrip. Jika tindakan shell tidak tersedia di instalasi Anda, gunakan program Terminal lengkap di atas; program tersebut menjalankan tugas pengurutan yang sama secara mandiri. Pengaturan privasi dan keamanan lanjutan di Pintasan pada Mac.
Menerapkan aturan ke Unduhan tingkat teratas
Setelah pengujian sementara, perubahan konfigurasi untuk folder Unduhan sebenarnya adalah penggantian satu baris berikut di dalam pengurut. Ini adalah potongan konfigurasi, bukan program pengurutan mandiri:
root="$HOME/Downloads"
Kembali ke mode=preview setiap kali Anda mengubah root. Tinjau semua tujuan yang diusulkan dan pesan file yang dilewati sebelum mengaktifkan pemindahan. Program memproses sekaligus semua file langsung yang memenuhi syarat; program tidak menyediakan prompt pemilihan satu per satu.
Jalankan secara manual sebagai proses batch pada folder yang file-filenya telah selesai diunduh. Skrip tidak menentukan apakah unduhan sudah selesai, memantau penambahan baru, atau mengoordinasikan eksekusi bersamaan. Pemeriksaan dan pemindahan dilakukan sebagai operasi terpisah, jadi jangan lakukan aktivitas pemindahan file lain di folder tersebut saat skrip berjalan. Pratinjau adalah laporan keadaan saat ini, bukan reservasi untuk tujuan-tujuan tersebut.
Jika terjadi konflik, periksa kedua file di Finder dan putuskan apakah akan mengganti nama file tingkat teratas atau membiarkannya di tempat. Jika folder ekstensi terhalang, selesaikan masalah item yang menempati nama folder itu sebelum menjalankan ulang. Kedua kondisi ini tidak mengharuskan perubahan program agar menimpa file.
Akhiri dengan memeriksa folder tujuan sebenarnya di Finder dan mencocokkan file tingkat teratas yang tersisa dengan laporan. Contoh sementara memberi Anda uji penerimaan yang konkret: file yang dimaksud berpindah, nama yang sudah ada tetap utuh, dan isi bersarang tetap berada di tempat semula.
Sumber
- Mengatur file di Finder pada Mac — Dukungan Apple.
- Menampilkan atau menyembunyikan ekstensi nama file di Mac — Dukungan Apple.
- Apa itu Terminal di Mac? — Dukungan Apple.
- Mengelola file di Terminal pada Mac — Dukungan Apple.
- Manual Bash — Distribusi OSS Apple.
- tr(1) — menerjemahkan karakter — Distribusi OSS Apple.
- mkdir(1) — membuat direktori — Distribusi OSS Apple.
- mv(1) — memindahkan file — Distribusi OSS Apple.
- Mengenal Pintasan untuk macOS — Apple Developer.
- Membuat pintasan khusus di Mac — Dukungan Apple.
- Menguji tindakan di Pintasan pada Mac — Dukungan Apple.
- Menavigasi daftar tindakan di Pintasan pada Mac — Dukungan Apple.
- Pengaturan privasi dan keamanan lanjutan di Pintasan pada Mac — Dukungan Apple.