Tampilkan / sembunyikan ekstensi file melalui baris perintah OS X

18

Saya mencari cara, melalui terminal, untuk mengubah apakah ekstensi file tertentu ditampilkan di Finder, sesuatu seperti:

$ hideextension ~/music/somesong.mp3

Tanpa harus membuka Mendapatkan informasi dan ubah kotak centang, karena sangat membosankan.

Saya berencana memasukkannya ke dalam skrip yang saya panggil melalui pintasan menggunakan FastScripts. Saya ingin mencoba dan menjauh dari skrip GUI karena rasanya tidak bersih, meskipun ada gagasan tentang cara menyelesaikannya.

joshua.thomas.bird
sumber
Jika ada bedanya, saya mencoba mencapai ini di Lion.
joshua.thomas.bird

Jawaban:

22

Satu-satunya cara nyata untuk mengubahnya melalui GUI adalah dengan mengklik Sembunyikan ekstensi di Finder Info jendela. Memeriksa ini mengubah com.apple.FinderInfo atribut diperluas, yang biasanya tidak dapat diedit - setidaknya tidak mudah. Namun kita dapat menggunakan alat untuk melakukannya untuk kita.

Agar pekerjaan di bawah ini berhasil, Anda jelas perlu memilikinya Tampilkan semua ekstensi file tidak dicentang dalam preferensi Pencari.


Melalui AppleScript

AppleScript menawarkan fungsionalitas ini dengan set extension hidden perintah. Anda jelas membutuhkan alias ke objek file. Kita bisa mendapatkan itu, misalnya, melalui dialog. Ini hanya contoh kerja minimal.

tell application "Finder"
    set some_file to (choose file)
    set extension hidden of some_file to true
end tell

Untuk membalikkan, tukar saja true dengan false sini. Maka panggilan penuh, misalnya:

set extension hidden of alias "Macintosh HD:Users:werner:Desktop:file.png" to true

Anda dapat menjalankan ini langsung dari file skrip juga (terima kasih @DanielBeck untuk penambahan):

on run argv
tell application "Finder" to set extension hidden of (POSIX file (first item of argv) as alias) to true
end run

Simpan ini sebagai filename.scpt dan jalankan dari baris perintah dengan:

osascript filename.scpt targetfile

Dengan SetFile perintah

catatan: Ini sudah tidak digunakan lagi sejak Xcode 6.

Jika Anda menginstal Xcode, Anda akan mendapatkan SetFile(1) biner, yang melakukan persis apa yang Anda inginkan (dan menawarkan beberapa fungsi yang terkait dengan atribut file):

Sembunyikan ekstensi:

SetFile -a E <file>

Tampilkan ekstensi lagi:

SetFile -a e <file>
slhck
sumber
Sebenarnya, ini adalah alias, bukan file. Berikut cara menggunakan AppleScript dari baris perintah: on run argv [newline] tell application "Finder" to set extension hidden of (POSIX file (first item of argv) as alias) to true [newline] end run, digunakan sebagai osascript filename.scpt targetfile.
Daniel Beck
1
Kamu benar, tentu saja. Saya menambahkan acara AppleScript lengkap. Di masa depan, silakan saja dan tambahkan sesuatu yang penting untuk jawabannya - Anda selalu dapat melakukannya.
slhck
1
hanya apa yang saya cari .. syukurlah saya sudah menginstal Xcode dan SetFile melakukan trik :-)
thandasoru
SetFile sudah usang sejak Xcode 6 . Juga tautan ke halaman buku panduan telah kedaluwarsa.
Franklin Yu
@ FranklinYu Terima kasih atas informasinya. Apakah Anda tahu penggantinya?
slhck
4

Terima kasih slhck untuk jawaban Anda, itu membantu saya banyak untuk mendapatkan apa yang ingin saya lakukan.

Jadi karena saya suka pintasan, saya membuat Layanan "Jalankan Shell Script" melalui Automator.

for f in "$@"
do
    STATUS=`getFileInfo -ae "$f"`
    if [ $STATUS== 0 ];
    then
        SetFile -a E "$f"
    else
        SetFile -a e "$f"
    fi
done

Lalu saya pergi ke Finder - & gt; Preferensi Layanan dan menambahkan pintasan ke Layanan.

 "Command + Shift + H" didn't work for me,
 "Command + H" hides the application
 so i chose "Command + Shift + E"

Semoga ini bisa membantu. =)

Flurin Arner
sumber
Itu STATUS= baris tidak ada tanda centang kembali di akhir. Juga, pada Mac + XCode saya, perintah GetFileInfo memiliki modal G.
bjnord
0

Agar hanya memiliki satu argumen di baris perintah ( $ hideextension ~/music/somesong.mp3 ), Anda dapat membuat applescript menjadi skrip shell. Dimungkinkan untuk menggunakan osascript di shebang ( #!/usr/bin/osascript ) seperti pada kode berikut. Untuk melanjutkan :

  1. Uji kode apel Anda dalam file .scpt = & gt; toggle_hidden_extension.scpt
  2. Saat OK, tambahkan shebang ( #!/usr/bin/osascript ) di awal file
  3. Ekspor dengan format file "text" = & gt; toggle_hidden_extension.applescript
  4. Ubah ekstensi menjadi .sh = & gt; toggle_hidden_extension.sh
  5. Di Terminal, buat itu bisa dieksekusi:

    chmod u+x toggle_hidden_extension.sh
    
  6. Sekarang Anda dapat menjalankannya:

    ./toggle_hidden_extension.sh /path/to/myfile.mp3
    

Jadi, kode untuk menggambarkan:

#!/usr/bin/osascript

(*
usage: toggle_hidden_extension.sh file
*)

(*
Test 1 : ./toggle_hidden_extension.sh /Users/boissonnfive/Desktop/file.txt
Test 2 : ./toggle_hidden_extension.sh
Test 3 : ./toggle_hidden_extension.sh 0fdjksl/,3
*)

on run argv
    try
        processArgs(argv)
        toggleHiddenExtension(item 1 of argv)
    on error
        return usage()
    end try

    if result then
        return "Extension hidden for " & POSIX path of (item 1 of argv)
    else
        return "Extension revealed for " & (POSIX path of (item 1 of argv))
    end if

end run


on usage()

    return "usage: toggle_hidden_extension.sh file"

end usage

on processArgs(myArgs)

    set item 1 of myArgs to POSIX file (first item of myArgs) as alias

end processArgs

on toggleHiddenExtension(myFile)

    tell application "Finder" to set extension hidden of myFile to not (extension hidden of myFile)

end toggleHiddenExtension
boissonnfive
sumber