如何在 shell 脚本中获取没有绝对路径的文件名

如何在 shell 脚本中获取没有绝对路径的文件名

我正在尝试打印目录中包含扩展名(.gz)的文件名。目前我有下面的 shell 脚本,它打印绝对路径。我只想打印文件名。

有人可以就此提出建议吗?我尝试过不同的方法。

#!/bin/bash

sourceFolder=/Users/rojadhanavath/Desktop/app/logs/*.gz

sleepTimeinMinutes=200

cd $sourceFolder

for f in $sourceFolder do
   echo " printing the file name $f" done

当前输出是:

printing the file name
/Users/rojadhanavath/Desktop/app/logs/app-json.log copy 10.gz 
printing the file name
/Users/rojadhanavath/Desktop/app/logs/app-json.log copy 11.gz 
printing the file name
/Users/rojadhanavath/Desktop/app/logs/app-json.log copy 12.gz 
printing the file name
/Users/rojadhanavath/Desktop/app/logs/app-json.log copy 2.gz  printing
the file name /Users/rojadhanavath/Desktop/app/logs/app-json.log copy
3.gz

我只想要文件名:

例如app-json.log copy 10.gz

答案1

您可以采用以下基本名称$f

for f in $sourceFolder; do
    echo " printing the file name $(basename $f)"
done

或者,由于您已经使用过cd $sourceFolder,这也将起作用:

for f in *.gz; do
    echo " printing the file name $f"
done

答案2

正确的答案是@laktak。但这里还有另一种方法:

for f in "$sourceFolder"; do 
  echo " printing the file name ${f##*/}"
done

答案3

文件扩展名部分很简单。哪有这回事。有一些工具可以帮助您处理这个概念(例如basename),但它们不存在,因此请忽略它。对于您需要的内容,请使用该工具dirname

例如

echo " printing the file name $(dirname "$f")"

相关内容