特定のパターンに一致するファイルを検索し、そのファイル名をシェル スクリプトの変数の値として指定します。

特定のパターンに一致するファイルを検索し、そのファイル名をシェル スクリプトの変数の値として指定します。

シェルスクリプトで変数に割り当てられたファイル名を取得する方法を探しています。しかし、私のファイルの命名形式は次のようになっています。ファイル-1.2.0-SNAPSHOT.txt

ここで数字は時々変わることがありますが、このファイル名を変数に割り当てるにはどうしたらよいでしょうか。任意の正規表現を使用できますか?グレップ? または探す? またはファイル?

私のディレクトリは次のファイルで構成されています:

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

私の脚本ssh の:

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

関連情報