특정 패턴과 일치하는 파일을 찾고 해당 파일 이름을 쉘 스크립트의 변수에 값으로 할당하시겠습니까?

특정 패턴과 일치하는 파일을 찾고 해당 파일 이름을 쉘 스크립트의 변수에 값으로 할당하시겠습니까?

쉘 스크립트의 변수에 파일 이름을 할당하는 방법을 찾고 있습니다. 하지만 내 파일의 이름은 다음 형식으로 지정됩니다.파일-1.2.0-SNAPSHOT.txt.

여기에 있는 숫자는 때때로 변경될 수 있습니다. 이제 이 파일 이름을 변수에 할당하는 방법은 무엇입니까? 정규식을 사용할 수 있나요? 또는grep? 또는찾다? 또는문서?

내 디렉터리에는 다음 파일이 포함되어 있습니다.

file-1.2.0-SNAPSHOT.txt
newFile-1.0.0.txt
sample.txt

내 스크립트스크립트 파일:

file_path="/home/user/handsOn"
var=$file_path/file-1.2.0-SNAPSHOT.txt
newLocation=/new_path
cp $var $newLocation

이제 파일 버전이 때때로 변경됩니다. 내 스크립트는 모든 버전 번호에서 작동해야 합니다.

일치하는 파일 이름을 변수에 할당하는 방법은 무엇입니까? 돕다. 티아

답변1

파일이 file-1.2.0-SNAPSHOT.txt 패턴을 따른다고 가정하면 다음과 같을 수 있습니다.파일-1.2.0-SNAPSHOT.txt또는파일-1.3.0-SNAPSHOT.txt또는파일-1.5.1-SNAPSHOT.txt잠시 기다리면 아래와 같이 find 명령을 사용하여 파일을 가져올 수 있습니다.

find . -type f -iname "*SNAPSHOT.txt" 

다음으로 끝나는 모든 파일을 제공합니다.스냅샷.txt그런 다음 이를 사용하여 작업을 수행할 수 있습니다.

가리키다(.) 존재하다찾다파일을 포함해야 하는 상위 디렉터리일 수 있습니다. 처럼

find ~/my_files/ -type f -iname "*SNAPSHOT.txt" 

답변2

수많은 시행착오 끝에 저는 다음과 같은 해결책을 찾았습니다.

cd $file_path && fVar=$(find -type f -name 'file-[0-9].[0-9].[0-9]-SNAPSHOT.txt');

echo $fVar    # output is like ./file-1.2.0-SNAPSHOT.txt

fT=${fVar:2}  # removing first two characters'./'

echo "$fT"    # output is file-1.2.0-SNAPSHOT.txt

감사해요라케쉬당신의 기여답변, 이것은 나에게 도움이 됩니다.

답변3

당신이하고 싶은 것은 마지막 버전 만 복사하는 것 같아요.

#!/bin/bash
oldlocation="/file_path/"
newlocation="/new_path/"

cd "$oldlocation"

#Get the last version
file="$(ls  *SNAPSHOT.txt | sort -V | tail -n1)"

cp -v "$file" "$newlocation" && echo "Everything is ok"

답변4

선택은 -name 옵션으로 수행되고 작업은 -exec 옵션으로 수행됩니다.

find . -type f -name '*-[0-9].[0-9].[0-9]-SNAPSHOT.txt' -exec sh -c '
  file=$1
  # do what you want with $file as many times as you want
' {} {} \;

관련 정보