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
을 사용하여 폴더에 있는 모든 것을 반복합니다. 이전에$allFile
은ls $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 또는 명령 프롬프트를 관리자로 실행하십시오.