C Shell:根据文件类型执行不同的操作

C Shell:根据文件类型执行不同的操作

我对 C Shell 非常陌生。我正在尝试从命令行读取文件,并确定它是否是 zip 文件、.txt、符号链接、管道或其他文件(“未知”)。

然后我想根据类型执行一些指令。例如,如果它是一个 txt 文件,则打印有关它的信息(“它是一个文本文件”)并给出其大小。

这是我到目前为止所得到的:

!/bin/csh

if ( "echo ${1} | cut -d'.' -f2" == "zip" ) then
    echo $1 is a zip file
else
    echo sorry, $1 is not a zip file
endif

答案1

用于switch分析文件名。

switch ($1)
case *.zip:
  echo "$1 is a zip file"
  breaksw
default:
  echo "${1}: not supported"
endsw

要分析文件类型,请解析 的输出ls:第一个字符是文件类型。

switch ("`ls -logd "$1"`")
case d*:
  echo "$1 is a directory"
  breaksw
# ...
endsw

事实上您可能正在寻找file命令,它分析文件的内容以确定它包含的数据格式(并报告非常规文件的文件类型)。

file -- "$1"

答案2

使用反引号来计算内部命令的结果,这与其他 shell 相同。所以,而不是

"echo ${1} | cut -d'.' -f2"

这是一个肯定不等于字符串“zip”的字符串,请使用

`echo ${1} | cut -d'.' -f2`

它评估内部命令并返回结果。

相关内容