多个查找执行选项:synology index 命令行
Multiple find exec options: synology index command line
我想在将我的 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 "{}") 工作,将 {} 替换为
取一个实际值为例=>命令是正确的
感谢任何想法。
此致,
您的命令替换 $(echo $path)
和 $(basename "{}")
在执行 find
之前由您的 shell 执行。
而且您不需要 echo
$path
变量。您可以改为执行一个小的 shell 脚本:
find . -type f -name "*.$ext" -exec sh -c '
targetpath=; 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
.
之后省略 /
我想在将我的 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 "{}") 工作,将 {} 替换为 取一个实际值为例=>命令是正确的
感谢任何想法。
此致,
您的命令替换 $(echo $path)
和 $(basename "{}")
在执行 find
之前由您的 shell 执行。
而且您不需要 echo
$path
变量。您可以改为执行一个小的 shell 脚本:
find . -type f -name "*.$ext" -exec sh -c '
targetpath=; 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
.
/