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