쉘 스크립트에서 절대 경로 없이 파일 이름을 얻는 방법

쉘 스크립트에서 절대 경로 없이 파일 이름을 얻는 방법

확장자(.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")"

관련 정보