【问题标题】:Creating Files Of Specific Type创建特定类型的文件
【发布时间】:2018-03-10 09:12:08
【问题描述】:

我编写了一个 shell 脚本来创建许多文件。用户从命令行指定文件的数量及其文件扩展名。这是我的代码

#!/bin/bash

NUM_FILES=0
FILE_TYPES=""
LOCATION=`pwd`

if [ $# -eq 0 ]; then
    echo "**** ERROR: You must specify the number of files you wish to create and (optional) the file types.\n\n"
    exit 1
fi

if [ ! -z $1 ]; then
    NUM_FILES=$1
fi

if [ ! -z $2 ]; then
    FILE_TYPES=$2
else
    FILE_TYPES=".tmp"
fi

n=$NUM_FILES

for (( i=1; i <= n; i++ )) 
do
    touch TEMP_FILE_$i.$FILE_TYPES    #Files created here - this is where my script needs work
    echo "Created file " TEMP_FILE_$i.$FILE_TYPES
done

我的问题与创建指定类型的文件有关。传递给命令行的第二个参数 ($FILE_TYPES) 用于指定要使用的扩展名(txt、java、py 等),但是当我运行脚本时,Linux 将所有文件解释为文本类型,并且只是将扩展名添加到文件名的末尾。

例如,运行bash createFiles.sh 4 java 将导致创建四个名为TEMP_FILE_1.java 的文本文件,但在Linux GUI 中查看目录会显示类型为text 的文件。

如何修改 shell 脚本以创建指定类型的文件?

【问题讨论】:

  • 我刚刚测试了您的脚本,它完全符合您的要求。您可以在控制台中尝试“ls -lh”并显示输出吗?
  • if [ ! -z $1 ]; ... 真是自找麻烦。写NUM_FILES=${1:-0}; FILE_TYPES=${2:-.tmp}
  • 嗨,William - 我对 shell 脚本比较陌生,所以我能问一下为什么该语句会自找麻烦吗?它旨在检查以确保传递给脚本的第一个参数不为空
  • 请阅读How does accepting an answer work?。不要在问题标题中写上“已解决”这个词。

标签: linux bash shell


【解决方案1】:

Linux/Unix 中没有常规文件的“类型”。您可以注册任何自己的文件扩展名,以使用您选择的应用程序打开具有指定扩展名的文件。

请看问题答案:Register file extensions / mime types in Linux

还要了解 Linux 上名为“Shebangs (#!)”的其他关联机制,您可以阅读以下内容:File extensions and association with programs in linux

【讨论】:

    【解决方案2】:

    许多工具查看实际文件内容以确定文件类型(a'la file 实用程序)。当您创建空文件时,没有可以检查以推断文件类型的内容。因此,如果您想创建可识别为特定类型的文件,您可能必须为您支持的每种文件类型提供模板,并将模板内容复制到创建的文件中。例如,在创建.java 文件时编写一些最小的Java 程序,在创建.png 文件时编写1x1 像素图像等。

    【讨论】:

      猜你喜欢
      • 2021-10-05
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2010-10-02
      • 2016-12-03
      • 1970-01-01
      • 2016-12-31
      相关资源
      最近更新 更多