แสดง / ซ่อนนามสกุลของไฟล์ผ่านบรรทัดคำสั่ง OS X


21

ฉันกำลังมองหาวิธีผ่านเทอร์มินัลเพื่อเปลี่ยนว่าส่วนขยายของไฟล์ที่ระบุจะแสดงใน Finder หรือไม่ซึ่งเป็นไปตาม:

$ hideextension ~/music/somesong.mp3

โดยไม่ต้องเปิดรับข้อมูลและเปลี่ยนช่องทำเครื่องหมายเพราะมันน่าเบื่ออย่างมาก

ฉันวางแผนที่จะรวมไว้ในสคริปต์ที่ฉันโทรผ่านทางลัดโดยใช้ FastScripts ฉันต้องการที่จะลองและอยู่ห่างจากการเขียนสคริปต์ GUI เพราะรู้สึกไม่สะอาดแม้ว่าแนวคิดใด ๆ เกี่ยวกับวิธีการทำให้สำเร็จนี้ก็ยินดีต้อนรับ


หากมันสร้างความแตกต่างฉันพยายามทำให้สำเร็จใน Lion
joshua.thomas.bird

คำตอบ:


24

วิธีเดียวที่จะเปลี่ยนสิ่งนี้ผ่าน GUI คือคลิกที่ซ่อนส่วนขยายในหน้าต่างFinder Info การตรวจสอบการเปลี่ยนแปลงนี้จะมีการcom.apple.FinderInfoขยายคุณสมบัติซึ่งโดยปกติคุณไม่สามารถแก้ไขได้ - อย่างน้อยก็ไม่สะดวก อย่างไรก็ตามเราสามารถใช้เครื่องมือในการทำเพื่อเรา

เพื่อให้การทำงานด้านล่างคุณต้องแสดงส่วนขยายไฟล์ทั้งหมดอย่างชัดเจนในการตั้งค่าของ Finder's


ผ่าน AppleScript

AppleScript มีฟังก์ชันนี้พร้อมกับ set extension hiddenคำสั่ง คุณต้องการaliasวัตถุไฟล์อย่างชัดเจน ตัวอย่างเช่นเราสามารถรับได้แม้ว่าจะมีการโต้ตอบ นี่เป็นเพียงตัวอย่างการทำงานที่น้อยที่สุด

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

หากต้องการย้อนกลับเพียงแค่แลกเปลี่ยนtrueกับfalseที่นี่ การโทรแบบเต็มตัวอย่างเช่น:

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

คุณสามารถเรียกใช้สิ่งนี้ได้โดยตรงจากไฟล์สคริปต์ (ขอบคุณ@DanielBeckสำหรับการเพิ่ม):

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

บันทึกเป็นfilename.scptและเรียกใช้จากบรรทัดคำสั่งด้วย:

osascript filename.scpt targetfile

ด้วยSetFileคำสั่ง

หมายเหตุ:สิ่งนี้เลิกใช้แล้วตั้งแต่ Xcode 6

หากคุณติดตั้ง Xcode คุณจะได้รับSetFile(1)ไบนารี่ซึ่งทำสิ่งที่คุณต้องการอย่างแน่นอน

ซ่อนส่วนขยาย:

SetFile -a E <file>

แสดงส่วนขยายอีกครั้ง:

SetFile -a e <file>

พูดอย่างเคร่งครัดมันเป็นชื่อแทนไม่ใช่ไฟล์ นี่คือวิธีการที่จะใช้ AppleScript จากบรรทัดคำสั่ง: ใช้เป็น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 osascript filename.scpt targetfile
Daniel Beck

1
แน่นอนว่าคุณพูดถูก ฉันเพิ่มเหตุการณ์ AppleScript อย่างเต็มรูปแบบ ในอนาคตเพียงดำเนินการต่อและเพิ่มสิ่งที่สำคัญต่อคำตอบคุณยินดีต้อนรับเสมอ
slhck

1
เพียงแค่สิ่งที่ฉันกำลังมองหา .. โชคดีที่ฉันติดตั้ง Xcode และ SetFile ทำเคล็ดลับ :-)
thandasoru

SetFileจะเลิกตั้งแต่Xcode 6 ลิงก์ไปยังหน้าคู่มือหมดอายุแล้วด้วย
Franklin Yu

@ FranklinYu ขอบคุณสำหรับข้อมูล คุณรู้เกี่ยวกับการทดแทนหรือไม่?
slhck

4

ขอบคุณslhck สำหรับคำตอบของคุณมันช่วยให้ฉันได้รับสิ่งที่ฉันต้องการ

ดังนั้นเมื่อฉันชอบทางลัดฉันจึงสร้างบริการ "Run Shell Script" ผ่าน Automator

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

จากนั้นฉันไปที่ Finder -> การตั้งค่าบริการและเพิ่มทางลัดไปยังบริการ

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

หวังว่ามันจะช่วย =)


STATUS=เส้นหายไปกลับเห็บที่สิ้นสุด นอกจากนี้ใน Mac + XCode ของฉันคำสั่งGetFileInfoมีทุน G.
bjnord

1

มีอีกหนึ่งตัวเลือกถ้าคุณต้องการแสดงนามสกุลไฟล์ที่ถูกซ่อนอยู่ในปัจจุบัน: Finder เก็บตัวเลือก "ซ่อนนามสกุล" ในcom.apple.FinderInfoแอตทริบิวต์ไฟล์ขยาย คุณสามารถตรวจสอบด้วยตัวเองโดยใช้คำสั่งนี้ซึ่งจะแสดงรายการคุณสมบัติเพิ่มเติมทั้งหมด:

xattr -l /path/to/the/file

ดังนั้นเพื่อแสดงส่วนขยายคุณสามารถลบแอตทริบิวต์นั้นได้:

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

แต่โปรดทราบว่า Finder จัดเก็บข้อมูลเมตาอื่น ๆเช่นสีของแท็กในแอตทริบิวต์นี้ดังนั้นข้อมูลเมตานี้จะหายไป และเนื่องจากแอตทริบิวต์เป็นไบนารีคุณจึงไม่สามารถแก้ไขได้อย่างง่ายดาย


0

เพื่อให้มีเพียงหนึ่งอาร์กิวเมนต์ในบรรทัดคำสั่ง ( $ hideextension ~/music/somesong.mp3) คุณสามารถทำให้ applescript ของคุณกลายเป็นเชลล์สคริปต์ เป็นไปได้ที่จะใช้ osascript ใน shebang ( #!/usr/bin/osascript) เช่นในรหัสต่อไปนี้ เพื่อดำเนินการต่อ :

  1. ทดสอบรหัสแอปพลิเคชันของคุณในไฟล์. scpt => toggle_hidden_extension.scpt
  2. เมื่อตกลงให้เพิ่ม shebang ( #!/usr/bin/osascript) ที่จุดเริ่มต้นของไฟล์
  3. ส่งออกด้วยรูปแบบไฟล์ "text" => toggle_hidden_extension.applescript
  4. เปลี่ยนนามสกุลเป็น. sh => toggle_hidden_extension.sh
  5. ใน Terminal ให้เรียกใช้งานได้:

    chmod u+x toggle_hidden_extension.sh
    
  6. ตอนนี้คุณสามารถเรียกใช้:

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

ดังนั้นรหัสเพื่อแสดง:

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

แม้ว่าSetFileจะเลิกใช้แล้วตั้งแต่ Xcode 6 มันยังคงมีอยู่ใน XCode 11 ดังนั้นคุณสามารถคาดหวังให้มันยังคงอยู่ในเครื่องมือบรรทัดคำสั่งสำหรับอนาคตที่มองเห็นได้ ...

https://download.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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.