シェルスクリプトで変数に割り当てられたファイル名を取得する方法を探しています。しかし、私のファイルの命名形式は次のようになっています。ファイル-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
答え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
' {} {} \;