Hiển thị / ẩn phần mở rộng của tệp thông qua dòng lệnh OS X


21

Tôi đang tìm cách, thông qua thiết bị đầu cuối, để thay đổi xem phần mở rộng của một tệp cụ thể có được hiển thị trong Finder hay không, một cái gì đó dọc theo dòng:

$ hideextension ~/music/somesong.mp3

Không cần phải mở Nhận thông tin và thay đổi hộp kiểm, vì nó rất tẻ nhạt.

Tôi dự định kết hợp nó vào một kịch bản mà tôi đang gọi thông qua một phím tắt bằng FastScripts. Tôi muốn thử và tránh xa kịch bản GUI vì cảm thấy ô uế, mặc dù mọi ý tưởng về cách thực hiện việc này đều được hoan nghênh.


Nếu nó làm cho bất kỳ sự khác biệt, tôi đang cố gắng thực hiện điều này trên Lion.
joshua.thomas.bird

Câu trả lời:


24

Cách thực sự duy nhất để thay đổi điều này thông qua GUI là nhấp vào Ẩn tiện ích mở rộng trong cửa sổ Thông tin Finder . Việc kiểm tra này sẽ thay đổi com.apple.FinderInfothuộc tính mở rộng mà bạn thường không thể chỉnh sửa - ít nhất là không dễ dàng. Tuy nhiên chúng tôi có thể sử dụng một công cụ để làm điều đó cho chúng tôi.

Để phần bên dưới hoạt động, rõ ràng bạn cần phải hiển thị tất cả các phần mở rộng tệp trong tùy chọn của Trình tìm kiếm.


Thông qua AppleScript

AppleScript cung cấp chức năng này với set extension hiddenlệnh. Bạn rõ ràng cần một aliasđối tượng tập tin. Chúng ta có thể lấy nó, ví dụ, mặc dù một hộp thoại. Đây chỉ là một ví dụ làm việc tối thiểu.

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

Để đảo ngược, chỉ cần trao đổi truevới falseở đây. Cuộc gọi đầy đủ sau đó, ví dụ:

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

Bạn cũng có thể chạy trực tiếp từ tệp tập lệnh này (cảm ơn @DanielBeck vì đã thêm):

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

Lưu cái này dưới dạng filename.scptvà chạy nó từ dòng lệnh với:

osascript filename.scpt targetfile

Với SetFilelệnh

Lưu ý: Điều này không được chấp nhận kể từ Xcode 6.

Nếu bạn đã cài đặt Xcode, bạn sẽ nhận được SetFile(1)tệp nhị phân, thực hiện chính xác những gì bạn muốn (và cung cấp thêm một số chức năng liên quan đến thuộc tính tệp):

Ẩn phần mở rộng:

SetFile -a E <file>

Hiển thị lại phần mở rộng:

SetFile -a e <file>

Nói đúng ra, đó là bí danh, không phải tập tin. Đây là cách sử dụng AppleScript từ dòng lệnh : 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, sử dụng như osascript filename.scpt targetfile.
Daniel Beck

1
Bạn nói đúng, tất nhiên. Tôi đã thêm sự kiện AppleScript đầy đủ. Trong tương lai, chỉ cần tiếp tục và thêm bất cứ điều gì quan trọng vào câu trả lời - bạn luôn được chào đón.
slhck

1
đúng như những gì tôi đang tìm kiếm .. rất may tôi đã cài đặt Xcode và SetFile đã thực hiện thủ thuật :-)
thandasoru

SetFilekhông được dùng nữa kể từ Xcode 6 . Ngoài ra liên kết đến trang thủ công đã hết hạn.
Franklin Yu

@FranklinYu Cảm ơn thông tin. Bạn có biết về một sự thay thế?
slhck

4

Cảm ơn slhck cho câu trả lời của bạn, nó đã giúp tôi rất nhiều để có được những gì tôi muốn làm.

Vì vậy, vì tôi thích các phím tắt, tôi đã tạo một Dịch vụ "Chạy Shell Script" qua Automator.

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

Sau đó, tôi đã đi đến Finder -> Tùy chọn dịch vụ và thêm một lối tắt vào Dịch vụ.

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

Hy vọng nó giúp. =)


Các STATUS=dòng thiếu back-ve ở cuối. Ngoài ra, trên Mac + XCode của tôi, lệnh GetFileInfocó viết hoa G.
bjnord

1

Có thêm một tùy chọn nếu bạn muốn hiển thị tiện ích mở rộng tệp hiện đang bị ẩn: Finder lưu trữ tùy chọn "ẩn tiện ích mở rộng" này trong com.apple.FinderInfothuộc tính tệp mở rộng. Bạn có thể tự kiểm tra bằng cách chạy lệnh này liệt kê tất cả các thuộc tính mở rộng:

xattr -l /path/to/the/file

Vì vậy, để hiển thị tiện ích mở rộng, bạn có thể xóa thuộc tính đó:

xattr -d com.apple.FinderInfo /path/to/the/file

Nhưng hãy nhớ rằng Finder lưu trữ siêu dữ liệu khác như màu thẻ trong thuộc tính này, vì vậy siêu dữ liệu này sẽ bị mất. Và, vì thuộc tính là nhị phân, bạn không thể dễ dàng sửa đổi nó.


0

Để chỉ có một đối số trên dòng lệnh ( $ hideextension ~/music/somesong.mp3), bạn có thể làm cho applescript của mình trở thành tập lệnh shell. Có thể sử dụng osascript trong shebang ( #!/usr/bin/osascript) như trong đoạn mã sau. Tiến hành với :

  1. Kiểm tra mã applescript của bạn trong tệp .scpt => toggle_hidden_extension.scpt
  2. Khi OK, thêm shebang ( #!/usr/bin/osascript) vào đầu tệp
  3. Xuất nó với định dạng tệp "text" => toggle_hidden_extension.applescript
  4. Thay đổi tiện ích mở rộng thành .sh => toggle_hidden_extension.sh
  5. Trong Terminal, làm cho nó có thể thực thi được:

    chmod u+x toggle_hidden_extension.sh
    
  6. Bây giờ bạn có thể chạy nó:

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

Vì vậy, mã để minh họa:

#!/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

0

Ngay cả khi SetFilekhông được chấp nhận vì Xcode 6, nó vẫn có sẵn trong XCode 11, vì vậy bạn có thể mong đợi nó vẫn ở trong Công cụ dòng lệnh trong tương lai gần ...

https://doad.developer.apple.com/Developer_Tools/Command_Line_Tools_for_Xcode_11/Command_Line_Tools_for_Xcode_11.dmg

$ pkgutil --payload-files /Volumes/Command\ Line\ Developer\ Tools/Command\ Line\ Tools.pkg | grep SetFile
./Library/Developer/CommandLineTools/usr/bin/SetFile
./Library/Developer/CommandLineTools/usr/share/man/man1/SetFile.1
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.