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

标签 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

最佳答案

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

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

关于bash - 从shell脚本中的文件名中删除一级文件扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13695914/

相关文章:

bash - 在 bash for 循环中分离进程

arrays - shell中输入的数字

unix - 从Unix终端搜索并替换多个文件上的字符串

shell - 在地址处写入字节(从命令行十六进制编辑/修改二进制文件)

shell - ZSH:读取丢失时从内部标准输出输出

unix - xargs 无法正确逐行读取

linux - 使用 cat 和 tee 添加文件时的奇怪行为

php - 将 PHP 变量传递给 Bash 脚本,然后启动它

linux - 如何从命令提示符关闭 gvim

linux - 根据组变量中的主机名运行脚本