쉘 스크립트에서 확장자 없이 파일 이름 추출

쉘 스크립트에서 확장자 없이 파일 이름 추출

중복 가능성:
문자열에서 파일 확장자를 제거하는 가장 좋은 방법은 무엇입니까?
확장자를 제거하여 여러 파일의 이름을 바꾸는 방법은 무엇입니까?

데이터베이스에 로드하려는 .txt 파일이 많이 있습니다.

이러한 테이블은 .txt 파일과 이름이 동일하지만 확장자는 없습니다.

그래서 명령을 실행하고 싶습니다

for f in *.txt; do mysql -u root -p -e "LOAD DATA LOCAL INFILE '$f' INTO TABLE $f" -D rn4; done

그러나 마지막 것은 $f확장명이 아닌 이름만 사용하기를 원하기 때문에 머리가 아프다.

따라서 파일의 경우 piRNA.txt명령은 다음과 같습니다.

mysql -u root -p -e "LOAD DATA LOCAL INFILE 'piRNA.txt' INTO TABLE piRNA" -D rn4

어떻게 해야 하나요?

답변이 다른 분들에게 도움이 될 수 있도록 그냥 명령만 내리지 마시고, 일반적인 경우에 이름 추출하는 방법을 한두줄 정도 적어주세요.

답변1

쉘 스크립트에서 이 작업을 수행할 수 있습니다.

f=piRNA.txt
g=${f%.txt}

실행 중

 echo $f $g

다음과 같은 출력이 생성됩니다.

piRNA.txt piRNA

%구문을 사용하면 일치하는 접미사 패턴을 제거할 수 있습니다. 예제의 접미사 패턴 .txtf제거된 변수입니다. 패턴에는 와일드카드도 포함될 수 있습니다(예:배쉬 매뉴얼더 알아보기).

항상 그렇듯이 파일 이름에 공백이 포함될 수 있는 경우 변수에 대한 참조를 큰따옴표(예: "$f"등)로 묶어야 합니다.

답변2

이 시도:

for f in *.txt; do echo ${f%.*};done
  • 사용패턴 매칭 *.txt다음으로 끝나는 모든 파일과 일치합니다..txt
  • ${f%.*}쉘 구문은 다음과 같습니다매개변수 확장, 패턴과 일치하는 가장 작은 접미사를 제거합니다 $f. 여기서는 확장 부분을 제거합니다 .txt.

관련 정보