需要在多个文件夹中查找具有模式的最新文件并移动到另一台服务器

需要在多个文件夹中查找具有模式的最新文件并移动到另一台服务器

我在一台服务器上有几个编号为 1-10 的文件夹。每个文件夹都有多个文件。我需要找到具有模式名称的最新文件,例如:

  • 文件 1:NA_UW_CLUSTER_RESULTS_210916.zip
  • 文件 2:UW_CLUSTER_RESULTS_210916.zip

我需要选择“文件 2”并将其复制到另一台具有多个编号为 1-10 的相应文件夹的服务器。

因此,我需要将UW_CLUSTER_RESULTS_210916.zip具有匹配模式的最新文件 ( ) 从“A”服务器中的“文件夹 1”复制到“B”服务器中的“文件夹 1”。

答案1

也许这对于您的用例来说已经足够了:

ls -1 -td /dir1/prefix1* /dir2/prefix2* | head -n 1

或者更稳健:

find /dir1 /dir2 -type f \( -path "*dir1/prefix1*" -o -path "*dir2/prefix2*" \) -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "

答案2

zsh

set -o extendedglob

for folder ('folder '<->(n/))
  scp $folder/*CLUSTER_RESULTS_[0-9](#c6).zip(om[1]) B:$folder/

它使用了一些 zsh 高级 glob 运算符:

  • <->,这是<5-20>匹配数字的运算符,但这里没有限制,因此可以匹配任何十进制整数
  • [0-9]:在 zsh 中仅匹配 0123456789 个字符(而不是其他 shell 通常匹配的数百个字符)。
  • (#c6):类似于扩展正则表达式{6}:匹配前面的 6 个内容,因此这里是数字(需要extendedglob)。
  • (om[1]): 这部分是全局限定符。om按修改时间o排序m(最新的优先),[1]选择第一个。文件夹 glob 还使用 glob 限定符,n以数字方式对 glob 结果进行排序(因此folder 10在 后处理folder 9,而不是在folder 1和之间folder 2)。/限制为目录类型的文件。

相关内容