シェルスクリプトから絶対パスなしでファイル名を取得する方法

シェルスクリプトから絶対パスなしでファイル名を取得する方法

拡張子(.gz)を含むディレクトリのファイル名を印刷しようとしています。現在、絶対パスを印刷する次のシェルスクリプトがあります。ファイル名だけを印刷したいです。

誰でもこれについてアドバイスできますか?私はさまざまなアプローチを試しました。

#!/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

またはすでにthisを使用しているので、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")"

関連情報