【问题标题】:Remove one level of file extension from filename in shell script从 shell 脚本中的文件名中删除一级文件扩展名
【发布时间】:2012-12-04 04:06:40
【问题描述】:

我有一个 Bash 脚本循环遍历文件并屏蔽它们。这些文件被 gzip 压缩,我需要先将它们压缩,然后再将它们作为参数传递给 Python 程序,如下面的脚本所示。问题是变量$i 不会变成文件名的解压缩版本。解压前的文件名为my-log-1.c.log.gz。在如下文件上运行 gunzip 后,我想将 my-log-1.c.log 作为参数传递给 masker.sh 脚本,而不是 .gz 版本。我该怎么做?

#!bin/bash

cd /home/logs

  for i in *
     gunzip $i
     do
       python masker.py $i  # python program masks files 
     rm $i
     echo "masked_file and removed =  $i"
   done

【问题讨论】:

    标签: bash shell unix ksh


    【解决方案1】:

    使用basename

    for i in; do
      gunzip "$i"
      i=$(basename "$i" .gz)
      python masker.py "$i"  # python program masks files 
      rm $i
      echo "masked_file and removed =  $i"
    done
    

    第一个参数是文件名,第二个参数是要删除的扩展名。

    【讨论】:

    • 它将 my-log-1.c.log.gz 转换为 my-log-1.c.log 并将其存储在i
    • 目录中没有 .gz 扩展名的文件,我的脚本会搞砸吗?
    【解决方案2】:

    您可以使用以下程序:

    for i in; do
        gunzip "$i"
        i=$(echo $i|rev|cut -d'.' -f2-|rev)
        python masker.py "$i"  # python program masks files 
        rm $i
        echo "masked_file and removed =  $i"
    done
    

    【讨论】:

    • 您的去除句点的实现相当丑陋。它会很慢,感觉就像一个杂物。
    猜你喜欢
    • 2012-08-22
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多