सवाल स्क्रिप्ट फ़ाइल प्रकार दिखा रहा है?


मैं एक स्क्रिप्ट बनाना चाहता हूं जो दिखाता है कि किस प्रकार की फाइल है

उदाहरण के लिए :

./file.sh haha test lala ssss

haha --> file

test --> directory

lala --> symbolic link

ssss --> executable

मैं ऐसा करने की कोशिश कर रहा हूं लेकिन मुझे एक ही परिणाम नहीं मिला है ...

#!/bin/bash

function check_symboliclink
{
echo "Write symbolic link"
read something
find $something -type l 
echo "$something  symbolic link";
}

check_symboliclink

क्या किसी के पास उदाहरण की तरह करने का बेहतर विचार है?


1
2018-01-09 09:24


मूल




जवाब:


आप बस उपयोग कर सकते हैं file आदेश।

उदाहरण:

c0rp@c0rp: file file_1 file_2 file_3
file_1 ASCII text
file_2 ASCII text
file_3: symbolic link to file_2

अद्यतन करें

यदि आप उपयोग नहीं कर सकते हैं file यहां आदेश एक और समाधान है।

#!/bin/bash
for var in "$@"
do
    if [ -d $var ]; then
        echo $var " - > is a directory"
    fi

    if [ -f $var ]; then
        echo $var " - > is a file"
    fi

    if [ -h $var ]; then
        echo $var " - > is a symbolic link"
    fi

    if [ -x $var ]; then
        echo $var " - > executable"
    fi
done

इस स्क्रिप्ट में मैं उपयोग करता हूं for var in "$@", कहा पे "$@" माध्यम सभी पारित तर्क। तो उपयोग कर रहे हैं for आप सभी पारित तर्कों के माध्यम से पाश कर सकते हैं

यदि आप चाहते हैं, तो आप एक और चेक जोड़ सकते हैं इस

उदाहरण के लिए, यदि आप चेक जोड़ना चाहते हैं file is a socket:

अगर पहले ब्लॉक करें तो बस वही जोड़ें done शब्द:

            if [ -S $var ]; then
                    echo $var " - > is a Socket"
            fi

मैं केवल हालत बदलता हूं [ -S $var ]


2
2018-01-09 09:30



कमांड फ़ाइल का उपयोग किए बिना इसे पाने का कोई तरीका है? - user233233
आप केवल यह 4 अंक दिखाना चाहते हैं? (फ़ाइल, निर्देशिका, निष्पादन योग्य, लिंक) - c0rp
हाँ, कमांड फ़ाइल का उपयोग किए बिना - user233233
मैं जवाब अद्यतन करता हूँ। लेकिन 'कमांड लाइन का उपयोग किए बिना' कहकर क्या मतलब है? - c0rp
कृपया ध्यान दें कि -x यह निर्धारित करने का आदर्श परीक्षण नहीं है कि फ़ाइल निष्पादन योग्य है या नहीं। निर्देशिकाओं में निष्पादन योग्य बिट सेट भी हो सकता है। [ -x /etc/ ] && echo "YES""हाँ" प्रिंट करेगा, भले ही तकनीकी रूप से यह "निष्पादन योग्य फ़ाइल" न हो। अगर बयानों को घोंसला करना बेहतर होगा, जैसे कि एक बेंत जांचें कि नियमित फाइलें भी निष्पादन योग्य हैं या नहीं - Sergiy Kolodyazhnyy


यूनिक्स फ़ाइल प्रकार दिखा रहा है

इस सवाल को प्रस्तुत करने का तरीका यह प्रतीत होता है क्योंकि उपयोगकर्ता फ़ाइल के प्रकार को प्रदर्शित करने का प्रयास कर रहा है यूनिक्स फ़ाइल प्रकार समझ। इस उद्देश्य के लिए, किसी को एक स्क्रिप्ट की आवश्यकता नहीं है, क्योंकि वहां पहले से मौजूद सुविधाएं हैं जो ऐसी जानकारी प्रदर्शित करने में सक्षम हैं।

विशेष रूप से, stat आदेश इस उद्देश्य के लिए उपयुक्त है। डिफ़ॉल्ट रूप से, stat बहुत सारी जानकारी के साथ लंबे उत्पादन दिखाता है, लेकिन हम इसका उपयोग कर सकते हैं -c, --format, या --printf (ध्यान दें कि यह बैकस्लैश एस्केप प्रतीकों का अर्थ है) वांछित आउटपुट प्राप्त करने के विकल्प। उदाहरण के लिए,

$ stat -c '%n: %F' /etc/passwd /etc/resolv.conf /etc                        
/etc/passwd: regular file
/etc/resolv.conf: symbolic link
/etc: directory


$ stat --printf '%n: %F\n' /etc/passwd /etc/resolv.conf /etc                
/etc/passwd: regular file
/etc/resolv.conf: symbolic link
/etc: directory

एक और आदेश जिसे हम उपयोग कर सकते हैं find, जो है -printf विकल्प, लेकिन रूपांतरण विनिर्देशों में भिन्न है ( %<letter> प्रतीकों) और तथ्य यह है कि यह पत्रों में फ़ाइल प्रकार आउटपुट (देखें man find फ़ाइल पत्राचार के लिए फ़ाइल प्रकार के लिए):

$ find /etc/passwd /etc/resolv.conf /etc -prune  -printf "%p:%y\n"          
/etc/passwd:f
/etc/resolv.conf:l
/etc:d

बेशक, यदि कोई ज़रूरत है, तो हम हमेशा इसका उपयोग कर सकते हैं [ या test आदेश, लेकिन इसके लिए थोड़ा और काम की आवश्यकता होगी; हालांकि इस तरह हमें बाहरी चीज़ों पर भरोसा नहीं करना पड़ता है; यह एक पोर्टेबल तरीका है, हालांकि शायद आदर्श नहीं है।

#!/bin/sh

check_filetype(){
    if [ -f "$1" ];then
        if [ -h "$1" ]; then
            printf "%s\n" "$1: symbolic link"
        else
            printf "%s\n" "$1: regular"
        fi
    elif [ -d "$1"  ]; then
        printf "%s\n" "$1: directory"
    elif [ -c "$1" ]; then
        printf "%s\n" "$1: character device"
    elif [ -p "$1" ]; then
        printf "%s\n" "$1: named pipe"
    elif [ -S "$1" ]; then
        printf "%s\n" "$1: socket"
    fi
}

for arg
do
    check_filetype "$arg"
done

और इस तरह यह काम करेगा:

$ ./checkft.sh /etc/passwd /etc/resolv.conf /etc test.fifo /dev/tty1              
/etc/passwd: regular
/etc/resolv.conf: symbolic link
/etc: directory
test.fifo: named pipe
/dev/tty1: character device

फ़ाइल सामग्री दिखा रहा है

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

उस उद्देश्य के लिए, मौजूद है mimetype आदेश:

$ mimetype /etc/ /etc/resolv.conf  /etc/passwd test.fifo                          
/etc/:            inode/directory
/etc/resolv.conf: inode/symlink
/etc/passwd:      text/plain
test.fifo:        inode/fifo

और "जादू संख्याओं" के साथ परीक्षण करने के लिए हम उपयोग करेंगे file आदेश:

$ file /etc/ /etc/resolv.conf  /etc/passwd test.fifo                              
/etc/:            directory
/etc/resolv.conf: symbolic link to ../run/resolvconf/resolv.conf
/etc/passwd:      ASCII text
test.fifo:        fifo (named pipe)

जो भी कर सकता है mimetypeनौकरी:

$ file --mime-type /etc/ /etc/resolv.conf  /etc/passwd test.fifo                  
/etc/:            inode/directory
/etc/resolv.conf: inode/symlink
/etc/passwd:      text/plain
test.fifo:        inode/fifo

0
2017-11-10 18:14