OS X कमांड लाइन के माध्यम से किसी फ़ाइल का एक्सटेंशन दिखाना / छिपाना


21

मैं टर्मिनल के माध्यम से एक रास्ता खोज रहा हूँ, यह जानने के लिए कि क्या फाइंडर में एक विशिष्ट फ़ाइल का एक्सटेंशन दिखाया गया है या नहीं, कुछ की तर्ज पर:

$ hideextension ~/music/somesong.mp3

Get Info को खोलने और चेकबॉक्स को बदलने के बिना , क्योंकि यह बड़े पैमाने पर थकाऊ है।

मैं इसे एक स्क्रिप्ट में शामिल करने की योजना बना रहा हूं जिसे मैं FastScripts का उपयोग करके शॉर्टकट के माध्यम से कह रहा हूं। मैं कोशिश करना और जीयूआई स्क्रिप्टिंग से दूर रहना चाहता हूं क्योंकि यह अशुद्ध लगता है, हालांकि इसे पूरा करने के बारे में कोई भी विचार स्वागत योग्य है।


अगर इससे कोई फर्क पड़ता है, तो मैं इसे शेर पर पूरा करने की कोशिश कर रहा हूं।
joshua.thomas.bird

जवाबों:


24

GUI के माध्यम से इसे बदलने का एकमात्र वास्तविक तरीका फाइंडर इंफो विंडो में Hide extension पर क्लिक करना है । इसकी जाँच करने से विस्तारित विशेषता बदल जाती है , जिसे आप सामान्य रूप से संपादित नहीं कर सकते हैं - कम से कम आसानी से नहीं। हालांकि हम इसे हमारे लिए करने के लिए एक उपकरण का उपयोग कर सकते हैं।com.apple.FinderInfo

नीचे काम करने के लिए, आपको स्पष्ट रूप से खोजक की प्राथमिकताओं में अनियंत्रित सभी फ़ाइल एक्सटेंशन दिखाना होगा


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
डैनियल बेक

1
तुम सही हो, बिल्कुल। मैंने पूरा AppleScript इवेंट जोड़ा। भविष्य में, बस आगे बढ़ें और उत्तर के लिए कुछ भी महत्वपूर्ण जोड़ें - आपका हमेशा स्वागत है।
slhck

1
बस मैं क्या देख रहा था .. शुक्र है कि मैंने Xcode लगाया है और SetFile ने किया है :-)
thandasoru

SetFileXcode 6 के बाद से हटा दिया गया है । इसके अलावा मैनुअल पेज का लिंक समाप्त हो गया है।
फ्रेंकलिन यू

@FranklinYu जानकारी के लिए धन्यवाद। क्या आप एक प्रतिस्थापन के बारे में जानते हैं?
slhck

4

आपके उत्तर के लिए धन्यवाद slhck , इसने मुझे एक गुच्छा बनाने में मदद की जो मुझे चाहिए था।

इसलिए जब से मुझे शॉर्टकट पसंद आया, मैंने एक "रन शैल स्क्रिप्ट" सेवा बनाई, हालांकि ऑटोमेटर।

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

फिर मैं खोजक -> सेवा प्राथमिकताएँ पर गया और सेवा में एक शॉर्टकट जोड़ा।

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

आशा करता हूँ की ये काम करेगा। =)


STATUS=लाइन अंत में एक बैक-टिक याद आ रही है। इसके अलावा, मेरे मैक + XCode पर, कमांड GetFileInfoमें एक पूंजी जी है
bjnord

1

यदि आप वर्तमान में छिपे हुए फ़ाइल एक्सटेंशन दिखाना चाहते हैं, तो एक और विकल्प है: फ़ाइंडर com.apple.FinderInfoविस्तारित फ़ाइल विशेषता में इस "छिपाने के विस्तार" विकल्प को संग्रहीत करता है। आप इस कमांड को चलाकर इसे स्वयं देख सकते हैं जो सभी विस्तारित विशेषताओं को सूचीबद्ध करता है:

xattr -l /path/to/the/file

इसलिए, एक्सटेंशन दिखाने के लिए, आप उस विशेषता को हटा सकते हैं:

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

लेकिन ध्यान रखें कि फाइंडर अन्य मेटाडेटा को संग्रहीत करता है जैसे कि इस विशेषता में टैग रंग, इसलिए यह मेटाडेटा खो जाएगा। और, चूंकि विशेषता द्विआधारी है, आप इसे आसानी से संशोधित नहीं कर सकते।


0

कमांड लाइन ( $ hideextension ~/music/somesong.mp3) पर केवल एक तर्क रखने के लिए , आप अपनी एप्सस्क्रिप्ट को एक स्क्रिप्ट बना सकते हैं। #!/usr/bin/osascriptनिम्नलिखित कोड की तरह शेबंग ( ) में ऑसस्क्रिप्ट का उपयोग करना संभव है । प्रवृत्त होना :

  1. अपने। कोड फ़ाइल को .scpt फ़ाइल => toggle_hidden_extension.scpt पर परीक्षण करें
  2. ठीक #!/usr/bin/osascriptहोने पर, फ़ाइल की शुरुआत में शेबंग ( ) जोड़ें
  3. इसे फ़ाइल स्वरूप "टेक्स्ट" => टॉगल_हेड_स्टेंशन.applescript के साथ निर्यात करें
  4. एक्सटेंशन .sh => toggle_hidden_extension.sh में बदलें
  5. टर्मिनल में, इसे निष्पादन योग्य बनाएं:

    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

यहां तक ​​कि अगर SetFileXcode 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.