移动与 shell 脚本中的模式匹配的文件

移动与 shell 脚本中的模式匹配的文件

我需要将最新文件移动到文件名与命名约定“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 创建于 3/10/2016

答案1

如果您相信自己的时间戳,您也可以使用 oneliner。

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

相关内容