シェルスクリプトでパターンに一致するファイルを移動する

シェルスクリプトでパターンに一致するファイルを移動する

最新のファイルを「ServicesWebApp」命名規則に一致するファイル名のディレクトリに移動する必要があります。

例:同じ名前の5つのファイルを含むディレクトリがあります。

ServicesWebApp-1005.war  created on 3/10/2016
ServicesWebApp-1004.war  created on 3/09/2016
ServicesWebApp-1003.war  created on 3/08/2016
ServicesWebApp-1002.war  created on 3/07/2016
ServicesWebApp-1001.war  created on 3/06/2016

最新のディレクトリを別のディレクトリに移動する必要があります。この場合はそうします。 ServicesWebApp-1005.warが2016年3月10日に作成されました。

答え1

タイムスタンプを信頼している場合は、オネライナーを使用することもできます。

mv $(ls -tr ServicesWebApp* | tail -1) /tmp/

またはファイル名に依存する場合。

mv $(ls ServicesWebApp* | sort -n | tail -1) /tmp/

答え2

次のことを試すこともできます。

mv $(find . -type f -name "ServicesWebApp*" -printf "%T@ %f\n" | sort -n | awk '{print $2}' | tail -1 ) /new/file/path/

答え3

tstamp=0
file=
for f in ServicesWebApp*
do
  y=$(stat -c "%Y" "$f")
  if [ $y -gt $tstamp ]
  then
    file="$f"
    tstamp=$y
  fi
done
echo cp "$file" /somewhere/else

答え4

単一行実行を試すことができますコマンドの置き換え

$ mv $(ls -t /location/path/ServicesWebApp* | head -n1) /to/new/destination/path

進む

$ ls -t /location/path/ServicesWebApp* | head -n1
/location/path/ServicesWebApp-1005.war

したがって、コマンドは次のように解釈する必要があります。

$ mv /location/path/ServicesWebApp-1005.war /to/new/destination/path

関連情報