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
コマンドを使用すると、ディレクトリが最初にリストされ、2番目のコマンドでファイルがリストされます。最初のコマンドの目的は、現在のディレクトリ表示を-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
これを行うために使用することを検討してください。