从shell脚本中的filename中删除一级文件扩展名

时间:2012-12-04 04:06:41

标签: bash shell unix ksh

我有一个Bash脚本循环遍历文件并屏蔽它们。这些文件是gzip压缩的,我需要先将它们进行gunzip,然后再将它们作为参数传递给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

2 个答案:

答案 0 :(得分:3)

使用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

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

答案 1 :(得分:0)

您可以使用以下程序:

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