bash 스크립트에서 파일 이름의 확장자를 확인하는 방법은 무엇입니까?
bash에서 야간 빌드 스크립트를 작성 중입니다.
하나의 작은 걸림돌을 제외하고는 모든 것이 훌륭하고 멋집니다.
#!/bin/bash
for file in "$PATH_TO_SOMEWHERE"; do
if [ -d $file ]
then
# do something directory-ish
else
if [ "$file" == "*.txt" ] # this is the snag
then
# do something txt-ish
fi
fi
done;
내 문제는 파일 확장자를 결정하고 그에 따라 행동하는 것입니다. 문제가 if 문에 있고 txt 파일을 테스트하고 있음을 알고 있습니다.
파일에 .txt 접미사가 있는지 어떻게 알 수 있습니까?
"$ file의 마지막 네 문자는 .txt
?와 같 습니까?" 그렇다면 다음을 사용할 수 있습니다.
if [ ${file: -4} == ".txt" ]
':-'수정자는 다른 것을 의미하므로 file:
와 사이에 공백 -4
이 필요합니다.
하다
if [ "$file" == "*.txt" ]
이처럼 :
if [[ $file == *.txt ]]
즉, 큰 괄호와 따옴표는 없습니다.
오른쪽 ==
은 쉘 패턴입니다. 정규식이 필요하면 =~
then을 사용하십시오 .
유닉스 시스템에서는 .txt 파일이 텍스트 파일이라는 것을 확신 할 수 없습니다. 최선의 방법은 "파일"을 사용하는 것입니다. 아마도 다음을 사용하십시오.
file -ib "$file"
그런 다음 "텍스트", "응용 프로그램"등과 같은 항목을 얻는 MIME의 첫 번째 부분과 일치하거나 구문 분석하기 위해 MIME 유형 목록을 사용할 수 있습니다.
실제로 확장자에 의존하지 않고 파일에 대한 정보를 찾으려면 "file"명령을 사용할 수 있습니다.
확장 기능을 사용하는 것이 편한 경우 grep을 사용하여 확장 기능이 일치하는지 확인할 수 있습니다.
당신은 또한 할 수 있습니다 :
if [ "${FILE##*.}" = "txt" ]; then
# operation for txt files here
fi
'file'과 유사하게, 파일 확장자에 관계없이 약간 더 간단한 'mimetype -b'를 사용하십시오.
if [ $(mimetype -b "$MyFile") == "text/plain" ]
then
echo "this is a text file"
fi
편집 : mimetype을 사용할 수없는 경우 시스템에 libfile-mimeinfo-perl을 설치해야 할 수도 있습니다
파일 형식을 확인한 다음 파일을 위치에 복사하는 bash 스크립트를 작성했습니다. 파이어 폭스 캐시에서 온라인으로 본 비디오를 살펴 보는 데 사용합니다.
#!/bin/bash
# flvcache script
CACHE=~/.mozilla/firefox/xxxxxxxx.default/Cache
OUTPUTDIR=~/Videos/flvs
MINFILESIZE=2M
for f in `find $CACHE -size +$MINFILESIZE`
do
a=$(file $f | cut -f2 -d ' ')
o=$(basename $f)
if [ "$a" = "Macromedia" ]
then
cp "$f" "$OUTPUTDIR/$o"
fi
done
nautilus "$OUTPUTDIR"&
여기에 제시된 것과 비슷한 아이디어를 사용합니다. 이것이 누군가에게 도움이되기를 바랍니다.
리눅스에서 파일 이름으로 확장자를 얻는 방법에 대한 정답은 다음과 같습니다.
${filename##*\.}
디렉토리의 모든 파일 확장자를 인쇄하는 예
for fname in $(find . -maxdepth 1 -type f) # only regular file in the current dir
do echo ${fname##*\.} #print extensions
done
나는 그 생각 '$PATH_TO_SOMEWHERE'
같은 것입니다 '<directory>/*'
.
이 경우 코드를 다음과 같이 변경합니다.
find <directory> -maxdepth 1 -type d -exec ... \;
find <directory> -maxdepth 1 -type f -name "*.txt" -exec ... \;
디렉토리 및 텍스트 파일 이름으로 더 복잡한 작업을 수행하려는 경우 다음을 수행 할 수 있습니다.
find <directory> -maxdepth 1 -type d | while read dir; do echo $dir; ...; done
find <directory> -maxdepth 1 -type f -name "*.txt" | while read txtfile; do echo $txtfile; ...; done
파일 이름에 공백이 있으면 다음을 수행 할 수 있습니다.
find <directory> -maxdepth 1 -type d | xargs ...
find <directory> -maxdepth 1 -type f -name "*.txt" | xargs ...
컷으로 가져가
>cut -d'.' -f2<<<"hi_mom.txt"
txt
awk로 내가 취하는 것은 다음과 같습니다.
>MY_DATA_FILE="my_file.sql"
>FILE_EXT=$(awk -F'.' '{print $NF}' <<< $MY_DATA_FILE)
>if [ "sql" = "$FILE_EXT" ]
>then
> echo "file is sql"
>fi
>awk -F'.' '{print $NF}' <<eof
>hi_mom.txt
>my_file.jpg
>eof
참고 URL : https://stackoverflow.com/questions/407184/how-to-check-the-extension-of-a-filename-in-a-bash-script
'IT박스' 카테고리의 다른 글
안드로이드에서 선을 그리는 방법 (0) | 2020.06.12 |
---|---|
반응 네이티브 : 응용 프로그램이 등록되지 않았습니다 오류 (0) | 2020.06.12 |
Java에서 현재 타임 스탬프를 문자열 형식으로 얻는 방법은 무엇입니까? (0) | 2020.06.10 |
병렬로 중첩이 대기합니다. (0) | 2020.06.10 |
문자열 변수 보간 자바 (0) | 2020.06.10 |