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
이 작업을 수행하는 데 사용하는 것을 고려하십시오 .