特定のパターンに一致するファイルを探し、そのファイル名をシェルスクリプトの変数に値として割り当てますか?

特定のパターンに一致するファイルを探し、そのファイル名をシェルスクリプトの変数に値として割り当てますか?

私はシェルスクリプトの変数にファイル名を割り当てる方法を探しています。しかし、私のファイルの名前は次の形式で指定されます。ファイル-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
' {} {} \;

関連情報