gpt4 book ai didi

file - 如何使用shell脚本在unix中创建所需的文件名

转载 作者:行者123 更新时间:2023-12-04 06:44:49 25 4
gpt4 key购买 nike

我正在使用 shell 脚本读取一个包含一些文件路径的属性文件。现在根据这个文件路径,我想创建 zip 文件的名称。像这样的东西...我的属性文件内容::

path=tmp/inputs/logs/abc
path=tmp/backup/inte/xyz
destpath=abc/xyz

现在我可以将文件名创建为 abc.zip 和 xyz.zip 为:
paths=`grep path myfile.property |cut -d= -f2`
d_path=`grep destpath myfile.property |cut -d= -f2`
filename=$d_path/$(basename $paths).zip

其中创建 abc.zip 和 xyz.zip。但我想通过获取路径的最后三个参数来创建名称。像这样的东西...
  • abc.zip应该是 inputs_logs_abc.zip
  • xyz.zip应该是 backup_inte_xyz.zip

  • 编辑
    Paths=`grep path myfile.txt |cut -d= -f2`

    d_Path=`grep destpath myfile.txt |cut -d= -f2`

    for s_Path in $Paths

    do

    prefix=${Paths%%/*/*/*}
    without_prefix=${Paths##${prefix}/}
    slashes_to_underscores=${without_prefix//\//_}
    zipFile=$d_Path/${slashes_to_underscores}.zip
    find $s_Path -type f -name "*.log" | xargs zip -mT $zipFile -@

    done

    以上是我的代码。通过使用它,我无法实现我的目标。
    有人可以帮我吗?

    最佳答案

    由于您使用的是 bash (这也适用于 zsh 或类似情况),您可以使用其内置参数替换。

    % path=tmp/inputs/logs/abc
    % prefix=${path%%/*/*/*}
    % without_prefix=${path##${prefix}/}
    % slashes_to_underscores=${without_prefix//\//_}
    % filename=${slashes_to_underscores}.zip
    % echo $filename
    inputs_logs_abc.zip

    您可以添加 ${d_path}视情况而定 ${filename} . $path在我的示例中是硬编码的,您将在 ${paths} 的循环中分配它,根据 fahd's answeryour previous question .
  • ${var//exp/sub}替换 exp 的所有实例在 $varsub
  • ${var%%exp}修剪 exp 的任何实例从 var 的右边
  • ${var##exp}修剪 exp 的任何实例从 var 的左边

  • 编辑(经过一些 sleep 和澄清):
    prefix=${path%%/*/*/*}从右到左进行贪婪匹配。如果您在 tmp 之前有一个 '/' 这将中断(这不是您在评论中所说的,但会给出该结果)。将此行更改为 prefix=${path%/*/*/*} (单个百分比符号:非贪婪)这应该修复更长和更短的路径。

    编辑 2(更新问题后):

    我可以看到三个问题:
  • "Paths= grep path myfile.txt |cut -d= -f2 "# 这匹配 "destpath=abc/xyz",你应该是 grep'^path='只获取以“path=”开头的行。
  • 您正在使用 ${Paths}在你应该使用的循环中两次(名字奇怪)${s_Path} .
  • 您仍在使用 prefix= 中的贪婪匹配线。请参阅我之前的编辑。
  • 关于file - 如何使用shell脚本在unix中创建所需的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3865636/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com