显示文件内容

显示文件内容

我想写一个脚本来显示文件类型

例如 :

./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

您只需使用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

只需在单词前添加相同的 if 块done

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

我只改变条件[ -S $var ]

答案2

显示 Unix 文件类型

这个问题的呈现方式看起来像是用户试图显示文件的类型Unix 文件类型意义。对于此目的,不需要脚本,因为已经存在能够显示此类信息的实用程序。

具体来说,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

显示文件内容

如果我们想获得有关文件类型的详细信息,有两种方法可以解决。一种是通过哑剧类型另一个是通过神奇数字,文件的前几位。虽然 mime-type 最初是为了在互联网上确定文件类型而存在的,但现在许多桌面应用程序都依赖于查询 mime-type 信息来正确显示文件图标并使用适当的应用程序打开它们。

为了此目的,存在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

相关内容