find 命令,仅当文件较新时执行

find 命令,仅当文件较新时执行

我有一个包含以下步骤的脚本:

  • 1 用lftp镜像远程服务器
open ftps://'[name]':'[pwd]'@[remote_host]    
set ssl:check-hostname no  
mirror --delete-first --only-newer /ExchangeSets
/home/sandbox_autopilot/Exchangesets  
exit
  • 2 接下来,我使用 find 命令根据文件名的开头对文件进行排序,并将它们复制到文件夹中。
find /home/sandbox_autopilot/Exchangesets -iname '1R4*.000' -exec cp -u --target-directory /home/sandbox_autopilot/1R4/ {} \;  
find /home/sandbox_autopilot/Exchangesets -iname '1R5*.000' -exec cp -u --target-directory /home/sandbox_autopilot/1R5/ {} \;  
find /home/sandbox_autopilot/Exchangesets -iname '1R6*.000' -exec cp -u --target-directory /home/sandbox_autopilot/1R6/ {} \;
  • 3 我对文件夹中的文件进行了一大堆 GIS 更改:1R4、1R5、1R6,这些更改与我的问题无关。

重要的事情:

  • 镜像远程服务器后,文件夹 /home/sandbox_autopilot/Exchangesets 的子文件夹名称以 4 位数开头,包含较新文件的文件夹比旧文件夹具有更高的 4 位数开头(请参见下面的示例)。
  • /home/sandbox_autopilot/Exchangesets 中的文件夹结构中存在同一文件的多个版本。 “find -exec cp”命令请求的行为是将可用文件的最新版本放入目标目录中。

文件夹 /home/sandbox_autopilot/Exchangesets 结构中的多个文件示例:

find . -name 1R65Y842.000  
./5704b_[projectname]/ENC_ROOT/1R/6/1R65Y842/1R65Y842.000
./5721a_[projectname]/ENC_ROOT/1R/6/1R65Y842/1R65Y842.000
./5673b_[projectname]/ENC_ROOT/1R/6/1R65Y842/1R65Y842.000
./5618_[projectname]/ENC_ROOT/1R/6/1R65Y842/1R65Y842.000
./5802b_[projectname]/ENC_ROOT/1R/6/1R65Y842/1R65Y842.000
./5646a_[projectname]/ENC_ROOT/1R/6/1R65Y842/1R65Y842.000

注意:[项目名称] 全部不同,但出于隐私原因在本示例中被空白。

问题:
“find -exec cp”命令没有给我 1R6 文件夹中的最新文件。

我认为这就是正在发生的事情。

  • 在原始文件夹结构中,文件上的日期由“lftp镜像”命令正确传递。所以最新的文件有最新的日期。
  • 当“find -exec cp”命令找到一个文件并将其复制到相关的1R文件夹中时。文件日期设置为 now()。然后,当“find -exec cp”命令找到较新的同名文件时,它将不会复制,因为目标目录中的日期较新(now()),然后是需要覆盖的文件的文件日期目标目录中的文件,从而使 cp 上的 -u 功能无用。

我正在考虑的解决方案:

  • 我可以阻止 cp 命令在将文件复制到目标目录时更改文件的日期吗?那么 cp -u 可以评估正确的日期并将最新版本的文件放入目标目录中吗?
  • 符号链接而不是制作实际副本是否有帮助
  • find 上是否有一个选项可以评估找到的文件版本,并仅对文件的最新版本执行复制命令?

我的谦卑请求:
任何人都可以帮助我朝正确的方向前进吗?

答案1

cp 命令可以保留属性,包括时间戳。归档的最简单方法:cp -a保留所有属性。来自手册:

   --preserve[=ATTR_LIST]
         preserve the specified attributes (default:  mode,ownership,timestamps),  if  possible  additional  at‐
         tributes: context, links, xattr, all

  -a, --archive
         same as -dR --preserve=all

相关内容