file 명령을 사용하지 않고도 동일한 결과 얻기

file 명령을 사용하지 않고도 동일한 결과 얻기

file 명령을 사용하지 않고 어떻게 수행할 수 있습니까? 현재 디렉토리의 모든 파일과 해당 유형을 인쇄하려고 합니다.

./type.bash *
Desktop (Directory) 
Documents (Directory) 
Downloads (Directory) 
Music (Directory) 
list (Ordinary file)

답변1

당신은 그것을 사용할 수 있습니다통계자료.

$ touch regular_file
$ mkdir directory
$ stat -c %F regular_file directory/
regular empty file
directory
$
$ stat --format="%n: %F" regular_file directory
regular_file: regular empty file
directory: directory

답변2

파일과 디렉터리를 구별하고 싶지만 파일 형식에는 관심이 없다면 다음은 최소한의 예입니다.

find . -mindepth 1 -type d -printf '%f (Directory)\n' && find . -type f -printf '%f (Ordinary file)\n'

find명령을 사용하면 디렉터리가 먼저 나열되고 두 번째 명령에서는 파일이 나열됩니다. 첫 번째 명령의 목적은 현재 디렉터리 표시를 -mindepth 1건너뛰는 것입니다 ..

왜냐하면 발견된 것은재귀적이 옵션을 추가할 수도 있습니다 -maxdepth 1.

답변3

선생님이 질문에 표시된 결과를 복사하기를 원하는 경우 다음을 수행하기를 원할 수 있습니다.

#!/bin/sh

for f
do
        if [ -d "$f" ]
        then
                printf '%s (%s)\n' "$f" Directory
        elif [ -f "$f" ]
        then
                printf '%s (%s)\n' "$f" 'Ordinary file'
        else
                printf '%s (%s)\n' "$f" Other
        fi
done

이것은 순수한 배쉬입니다.

외부 프로그램을 사용하려는 경우 다음을 수행할 수 있습니다.

#!/bin/sh

for f
do
        case "$(ls -ld "$f")" in
           d*)
                printf '%s (%s)\n' "$f" Directory
                ;;
           -*)
                printf '%s (%s)\n' "$f" 'Ordinary file'
                ;;
           *)
                printf '%s (%s)\n' "$f" Other
        esac
done

답변4

이런 질문이 있을 때 가장 먼저 해야 할 일은 file맨페이지( man 1 file)를 읽는 것입니다. 해당 문서에 명시된 바와 같이:

 The filesystem tests are based on examining the return from a stat(2) system
 call.  The program checks to see if the file is empty, or if it's some sort of
 special file.  Any known file types appropriate to the system you are running
 on (sockets, symbolic links, or named pipes (FIFOs) on those systems that
 implement them) are intuited if they are defined in the system header file
 <sys/stat.h>.

 The magic tests are used to check for files with data in particular fixed for‐
 mats.  The canonical example of this is a binary executable (compiled program)
 a.out file, whose format is defined in <elf.h>, <a.out.h> and possibly
 <exec.h> in the standard include directory.  These files have a “magic number”
 stored in a particular place near the beginning of the file that tells the
 UNIX operating system that the file is a binary executable, and which of sev‐
 eral types thereof.  The concept of a “magic” has been applied by extension to
 data files.  Any file with some invariant identifier at a small fixed offset
 into the file can usually be described in this way.  The information identify‐
 ing these files is read from /etc/magic and the compiled magic file
 /usr/share/misc/magic.mgc, or the files in the directory /usr/share/misc/magic
 if the compiled file does not exist.  In addition, if $HOME/.magic.mgc or
 $HOME/.magic exists, it will be used in preference to the system magic files.

file매직넘버에 따라 다릅니다. 따라서 동등한 파일을 직접 구현하려면 먼저 stat일반 파일인지 확인하고 비어 있지 않으면 매직넘버를 사용해야 합니다. libmagic이 작업을 수행하는 데 사용하는 것을 고려하십시오 .

관련 정보