多个查找执行程序选项:synology索引命令行

问题描述 投票:0回答:1

我想在NAS上的某些文件移动到正确的文件夹后为其编制索引。我的命令将类似于:

find *.$ext -exec mv "{}" $path \; -exec synoindex -a $(echo $path)$(basename "{}") \;

第一部分正在工作。所有扩展名为$ ext的文件都将移至目标$ path。但是第二部分应该在这些文件的新$ path文件夹中建立索引,因此无法正常工作。

这很奇怪,因为:

  • {}包含正确的值=>处理的每个文件的完整旧路径为了确保这一点,我添加了仅能完成的第三部分:-exec echo {} \;
  • 分别执行{{echo $ path)$ {basename“ {}”)的操作后,{以值==给出了完整的新路径=>语法正确
  • 单独执行synoindex -a $(echo $ path)$(basename“ {}”)起作用,将{}替换为以一个实数值为例=>命令正确

感谢任何想法。

问候,

unix find exec nas synology
1个回答
0
投票

您的命令替换$(echo $path)$(basename "{}")在执行find之前由外壳程序执行。而且您不需要echo $path变量。您可以改为执行一个小的Shell脚本:

find . -type f -name "*.$ext" -exec sh -c '
  targetpath=$1; shift # get the value of $path
  for file; do
    mv -i "$file" "$targetpath"
    synoindex -a "$targetpath/${file##*/}"
  done
' sh "$path" {} +

这将从当前目录find中的.开始,以常规文件(-type f)结尾,以文件扩展名$ext-name "*.$ext")并执行一个小的Shell脚本,将$path变量作为第一个参数传递给脚本。以下参数是find找到的文件路径。

参数扩展${file##*/}从文件中删除最长的前缀*/,结果为基名。如果$path变量已经包含斜杠/,请在/之后省略$targetpath

© www.soinside.com 2019 - 2024. All rights reserved.