Ich suche nach einer Möglichkeit, den Dateinamen einer Variablen in meinem Shell-Skript zuzuweisen. Aber meine Datei hat das Benennungsformat alsDatei-1.2.0-SNAPSHOT.txt.
Hier können sich die Zahlen manchmal ändern. Wie kann ich diesen Dateinamen nun einer Variablen zuweisen? Kann jeder reguläre Ausdruck verwendet werden? odergrep? oderfinden? oderDatei?
Mein Verzeichnis besteht aus folgenden Dateien:
file-1.2.0-SNAPSHOT.txt
newFile-1.0.0.txt
sample.txt
Mein Skriptsc.sh:
file_path="/home/user/handsOn"
var=$file_path/file-1.2.0-SNAPSHOT.txt
newLocation=/new_path
cp $var $newLocation
Nun ändert sich die Dateiversion manchmal. Mein Skript sollte für jede Versionsnummer funktionieren.
Wie kann ich den passenden Dateinamen einer Variablen zuweisen? Helfen Sie mir. TIA
Antwort1
Nehmen wir an, Ihre Datei folgt diesem Muster file-1.2.0-SNAPSHOT.txt, also kann es so aussehenDatei-1.2.0-SNAPSHOT.txtoderDatei-1.3.0-SNAPSHOT.txtoderDatei-1.5.1-SNAPSHOT.txtusw., dann können Sie die Dateien mit dem Suchbefehl wie folgt abrufen: -
find . -type f -iname "*SNAPSHOT.txt"
Es werden Ihnen alle Dateien angezeigt, die mit endenSNAPSHOT.txtund dann können Sie es für Ihre Arbeit verwenden.
Punkt(.) Infindenkann ein übergeordnetes Verzeichnis sein, das die Datei enthalten soll. Wie
find ~/my_files/ -type f -iname "*SNAPSHOT.txt"
Antwort2
Nach vielem Ausprobieren habe ich schließlich die Lösung gefunden:
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
Antwort3
Ich glaube, Sie versuchen nur, die letzte Version zu kopieren.
#!/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"
Antwort4
Die Auswahl erfolgt über die Option -name und die Aktion über die Option -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
' {} {} \;