如何使用Shell脚本正确处理文件名

时间:2018-07-04 07:57:08

标签: bash shell

我想用一些shell脚本评估最新文件夹中的最新文件名。 因此,即时通讯会在其中获取最新的文件夹名称和最新的文件名:

  @GetMapping("/requesthandler")
    public String requesthandler
        (
                @RequestHeader(value="User-Agent") String userAgent,
                @RequestHeader(value = "host") String host,
                Model model
                )
{

    UserAgentStringParser parser = UADetectorServiceFactory.getResourceModuleParser();
    ReadableUserAgent agent = parser.parse(userAgent);
    Timestamp timestamp = new Timestamp(System.currentTimeMillis());

    this.host=host;
    this.deviceCategory=agent.getDeviceCategory().getName();
    this.operatingSystem=agent.getOperatingSystem().getName();
    this.typeName=agent.getTypeName();
    this.browserName=agent.getName();
    this.browserIcon=agent.getIcon();
    this.deviceProducer=agent.getProducer();
    this.versionNumber=agent.getVersionNumber().toVersionString();
    this.timeStampLong=timestamp.getTime();



    sendMessage(host,deviceCategory,operatingSystem,typeName,browserName,browserIcon,deviceProducer,versionNumber,timeStampLong);


    return "requesthandler";
}

文件夹结构:

latest_folder=$(ls -td */ | head -n 1)
echo $latest_folder
cd $latest_folder
latest_file="$(ls -t *$str | head -n 1)"
echo $latest_file

其中001是最新文件夹。如果此文件夹中的最新文件等于999。*,我需要创建一个新文件夹002。

有人知道吗?

1 个答案:

答案 0 :(得分:1)

您的想法并不遥远。我建议不要将cd放到最新的目录中,而只需使用相同的方案,通过在latest_folder/后面加上命令替换来获取该文件夹中的最新文件。

拥有latest_file后,您可以简单地使用参数扩展和子字符串删除来隔离前导3位数字(例如filenum="${latest_file%%.*}")。之后,您可以根据filenum决定是否需要新目录。

如果确实需要创建一个新目录,则可以使用printf -v来利用field-width修饰符和'0'填充来格式化new_folder命名为{{ 1}},只需将002加到1号上即可,例如latest_folder注意:就是在从printf -v new_folder "%03d" $((latest_folder + 1))中删除前导零之后,当添加latest_folder以获得1的数字时,例如,防止将其解释为八进制常量。 new_folder

将其完全放在一起,您应该能够执行以下操作:

$((latest_folder + 1))

注意:通常应使用#!/bin/bash limit=999 latest_folder="$(ls -td */ | head -n 1)" ## latest folder latest_folder="${latest_folder:0:(-1)}" ## remove / at end latest_file="$(ls -t "$latest_folder/" | head -n 1)" ## latest file filenum="${latest_file%%.*}" ## isolate ### if ((filenum == limit)); then ## if ### = 999 n=0 while [ "${latest_folder:n:1}" = '0' ]; do ## remove zeros latest_folder="${latest_folder:$((n+1))}" ((n++)) done printf -v new_folder "%03d" $((latest_folder + 1)) ## new folder name mkdir -p new_folder ## create new folder fi find来获取目录和文件名列表(使用sort-maxdepth进行控制搜索的文件/目录的深度和类型)

如果您有任何疑问,请告诉我。