将 echo 输出传输到 mv 命令的 xargs 脚本时出现问题

将 echo 输出传输到 mv 命令的 xargs 脚本时出现问题

并提前感谢您的任何建议。

我正在编写一个脚本,可以自动对我的下载进行排序。该脚本非常简单,手动运行它可以达到预期的效果。我遇到的问题是用于触发脚本的 fswatch 命令 - 我无法将 echo 的输出正确地传输到 xargs 中。命令如下:

fswatch --event Created Downloads/ | (while read x; do echo $x | xargs -0 bash ./dlsort.sh; done)

脚本如下:

if (echo "$1" | grep -q '\.jpg$'); then
  mv "$1" Desktop/images/ &
else
  mv "$1" Downloads/other/ &
fi

我已经确定了问题所在,但我不知道如何纠正它。文件名末尾添加了一个换行符,这导致 mv 命令失败,并在脚本中显示“没有这样的文件或目录”错误。我已经尝试了 echo 和 fswatch 命令中的多种变体,但都没有奏效。

再次感谢所有能提供帮助的人

答案1

针对这个特定问题找到了一个很好的答案:

使用 fswatch 选项 --format="%p%0"。这可确保传递给 xargs 的路径名末尾有空字符,这正是启用 -0 选项后 xargs 所寻找的。

相关内容