쉘 스크립트의 변수에 파일 이름을 할당하는 방법을 찾고 있습니다. 하지만 내 파일의 이름은 다음 형식으로 지정됩니다.파일-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
' {} {} \;