파일이 특정 문자로 시작하고 쉘 스크립트에서 파일 확장자 끝에 마침표를 제외하고 특수 문자가 포함되어 있지 않은지 테스트합니다.

파일이 특정 문자로 시작하고 쉘 스크립트에서 파일 확장자 끝에 마침표를 제외하고 특수 문자가 포함되어 있지 않은지 테스트합니다.

폴더의 여러 텍스트 파일에 대해 명령을 실행하기 위해 for 루프를 실행하는 쉘 스크립트가 있습니다. 이러한 파일의 이름이 특정 문자 집합(예: NA)으로 시작하는지, 파일에 특수 문자가 없는지(예: "-", "_"와 같이 파일 확장자 앞에 마침표가 없는 경우 제외) 테스트하고 싶습니다. 파일의 전체 이름을 테스트하는 방법을 알고 있지만 파일의 일부에 이러한 문자가 포함되어 있는지 테스트하는 방법이나 문자와 숫자만 포함되고 ". " ".txt"에서. 이러한 요구 사항을 충족하는 파일에서만 명령이 실행되도록 하려면 어떻게 해야 합니까? 나는 그것이 if 문을 사용한다는 것을 알고 있지만 그 이상은 확실하지 않습니다. 와일드카드나 정규식을 사용하는 경우인 것 같습니다.

답변1

아래 코드를 사용하면 "NA"로 시작하고 영숫자만 포함하며 ".txt"로 끝나는 텍스트 파일에 대해 특정 작업을 수행할 수 있습니다.

for f in /path/to/your/folder/*; do 
   if [[ ${f##*/} =~ NA[a-zA-Z0-9]*.txt ]]; then
      # perform some action on $f
   fi
done

파일이 "N" 또는 "A"로 시작하도록 하려면 다음 명령을 사용하십시오.

for f in /path/to/your/folder/*; do 
    if [[ ${f##*/} =~ [N,A][a-zA-Z0-9]*.txt ]]; then
       # perform some action on $f
    fi
done

답변2

빠른 해킹은 다음과 같습니다.

#!/bin/bash
for i in *;
do
  if [ $(echo $i|cut -c 1-2) == "NA" ];
    then
    EXECUTE_COMMAND
  fi
done

귀하의 질문을 올바르게 이해하고 있습니까?

답변3

쉘이 이를 지원하는 경우 확장된 와일드카드를 사용할 수 있습니다.

세게 때리다:

shopt -s extglob
for f in  NA*([[:alnum:]]).txt; do something; done

다루기 힘든:

setopt extendedglob
for f in  NA([[:alnum:]])#.txt; do something; done

여기서 *(...)및 는 (...)#각각 0개 이상의 발생을 나타냅니다.

답변4

egrep은 다음을 수행해야 합니다:

egrep 'NA[A-Z a-z 0-9]*\..{3,4}$'

따라서 ls /path/to/dir | egrep 'NA[A-Z a-z 0-9]*\..{3,4}$'다음과 같이 나열됩니다.

NAfoo.txt
NAbar1.jpeg
NA123baz.txt

그러나 다음은 제외됩니다.

aiNA1foo.txt
NA2foo_bar.jpeg
NAbar.baz.txt

등.

관련 정보