Eine Datei suchen, die einem bestimmten Muster entspricht, und diesen Dateinamen als Wert einer Variablen im Shell-Skript zuweisen?

Eine Datei suchen, die einem bestimmten Muster entspricht, und diesen Dateinamen als Wert einer Variablen im Shell-Skript zuweisen?

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

DankeRakeshfür Ihren BeitragAntwort, Es hat mir geholfen.

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
' {} {} \;

verwandte Informationen