Bash를 사용하여 파일 이름 및 확장명 가져오기

Ozair Malik 2023년1월30일
  1. Bash를 사용하여 파일 이름 및 확장명 가져오기
  2. Bash 파일을 실행하여 파일 이름 및 확장명 가져오기
Bash를 사용하여 파일 이름 및 확장명 가져오기

Bash 스크립팅은 일상적인 Linux 관리 작업이든 전체 DevOps 자동화 작업이든 최근 몇 년 동안 상당히 인기를 얻고 있습니다.

bash 스크립트에서 파일 이름과 확장자를 별도로 추출하려는 상황에 있다고 가정합니다. 예를 들어 server.py라는 이름의 python 파일이 있습니다. server라는 이름과 py 확장자를 분리하여 이 문자열을 두 부분으로 나누고 싶습니다.

Bash를 사용하여 파일 이름 및 확장명 가져오기

데모용으로 bash 스크립트를 작성했습니다. 원하는 경우 스크립트의 어느 곳에서나 이 코드를 사용할 수 있습니다.

  • 먼저 사용자가 적절한 인수를 제공했는지 확인합니다. 다음 코드 조각은 =에서 0이 되는 if 문을 사용합니다. 이는 인수가 제공되지 않았음을 의미합니다. 이 경우 pwd 또는 현재 작업 디렉토리를 기본 인수로 사용합니다.
#!/bin/bash

# Checking if arguments have been provided:
if [[ $# == 0 ]]; then
    cDir=$(pwd) # Setting the cDir variable to current directory
    echo "[-] No directory provided!"
else
    cDir=$1

fi
echo "[+] Setting the directory to $cDir"
  • 다음으로 사용자가 제공한 디렉토리가 존재하는지 확인한다. 존재하지 않으면 스크립트를 종료합니다.e
# Checking if the directory exists:
if [[ ! -d $cDir ]]; then
    echo "[-] Directory $cDir doesn't exist!"
    exit
fi
  • 이제 간단한 ls 명령을 사용하여 allFile 변수의 디렉터리(물론 유효한 경우)에서 사용 가능한 파일을 추출하기 시작합니다. 이 명령은 Linux 및 Windows 운영 체제의 PowerShell에서 실행됩니다.
# Main extraction:
allFile=`ls $cDir`
echo;

여기에서 제공된 경로의 마지막 값이 /가 아닌지 확인하고, 그렇지 않은 경우 오류를 피하기 위해 끝에 추가합니다.

# Checking if the last value of the path is '/' or not:
if [[ ${cDir: -1} != '/' ]]; then
    cDir+='/'
fi
  • 다음으로 for 루프와 변수 $allFile을 사용하여 폴더에 있는 모든 것을 반복합니다. 이전에 $allFilels $cDir 값을 가짐을 기억하십시오.
# Iterating over everything in the folder
for item in $allFile; do
    # Appending path to each file:
    item="$cDir$item"

루프에서 -f 플래그를 사용하여 감지된 파일이 type file인지 확인합니다. 이 경우 파일 이름에서 점 부분(예: 확장자 부분)을 제거합니다.

  • 결국 echo를 사용하여 원하는 방식으로 결과를 인쇄합니다.
# Checking if current item is a file:
if [[ -f $item ]]; then
	ext=`ls $item | rev | cut -d '.' -f 1 | rev`
	file_name=`ls $item | rev | cut -d '.' -f 2 | rev`
	echo "File Name: $file_name -> Extension: $ext"
fi
  • 이 스크립트는 특정 디렉토리가 존재하는지 여부를 확인합니다. 디렉토리가 존재하면 확장자와 함께 모든 파일을 언급합니다.
┌─[root@parrot][/home/user/Downloads]
└──╼ #./test2.sh
[-] No directory provided!
[+] Setting the directory to /home/user/Downloads

File Name: /home/user/Downloads/ExtraCredit_Sockets_Intro -> Extension: pdf
File Name: /home/user/Downloads/project -> Extension: sh
File Name: /home/user/Downloads/test2 -> Extension: sh
File Name: /home/user/Downloads/test -> Extension: txt
참고
우리는 인수로 제공된 디렉토리 없이 스크립트를 실행하므로 다운로드, 즉 내 현재 디렉토리를 기본값으로 간주하고 해당 디렉토리에 있는 모든 파일 이름과 확장자를 언급합니다.

코드의 각 줄에는 주석이 달려 있으므로 헷갈리는 부분이 있으면 확인하시면 됩니다.

스크립트를 사용하려면 여기 전체 버전이 있습니다.

#!/bin/bash

# Checking if arguments have been provided:
if [[ $# == 0 ]]; then
	cDir=$(pwd) # Setting the cDir variable to current directory
	echo "[-] No directory provided!"
else
	cDir=$1
fi
echo "[+] Setting the directory to $cDir"

# Checking if the directory exists:
if [[ ! -d $cDir ]]; then
	echo "[-] Directory $cDir doesn't exist!"
	exit
fi

# Main extraction:
allFile=`ls $cDir`
echo;

# Checking if the last value of the path is '/' or not:
if [[ ${cDir: -1} != '/' ]]; then
	cDir+='/'
fi

# Iterating over everything in the folder
for item in $allFile; do
	# Appending path to each file:
	item="$cDir$item"
	# Checking if current item is a file:
	if [[ -f $item ]]; then
		ext=`ls $item | rev | cut -d '.' -f 1 | rev`
		file_name=`ls $item | rev | cut -d '.' -f 2 | rev`
		echo "File Name: $file_name -> Extension: $ext"
	fi
done

Bash 파일을 실행하여 파일 이름 및 확장명 가져오기

bash를 배우려는 초보자이고 실행 방법을 모르는 경우 이 코드를 사용하십시오. bash 파일임을 의미하는 .sh 확장자를 가진 파일을 만들기만 하면 됩니다.

그런 다음 선택한 터미널을 사용하여 해당 디렉토리로 이동하고 ./filename을 입력하면 파일이 실행됩니다.

Windows 운영 체제를 사용하는 경우 bash file.sh를 입력하면 문제 없이 실행됩니다.

귀하의 경우 스크립트의 올바른 파일 이름을 사용하는 것을 잊지 마십시오.

권한 관련 문제

참고: 스크립트를 실행하는 동안 Permission Denied 오류가 발생할 수 있습니다.

터미널에서 chmod +x [file name]을 사용하여 올바른 권한을 제공해야 합니다.

권한 관련 문제를 방지하려면 Windows를 사용하는 경우 PowerShell 또는 명령 프롬프트를 관리자로 실행하십시오.

관련 문장 - Bash File