从服务器上的列表中删除文件而不实际同步它们?

从服务器上的列表中删除文件而不实际同步它们?

我有一种情况,我想将rsync一些脚本发送到服务器:

rsync -arh --stats --files-from="${LIST}" "${SRC}/" "${HOST}":"${DST}/"

在下一步中,我将ssh进入服务器并调用一些脚本。

工作完成后,我想删除上传的文件列表。

简而言之,我有一些与目录结构相关的脚本,因此ssh "${HOST}" rm -rf "${DST}/"不能考虑类似的事情,因为${DST}包含其他文件。

有没有办法实现撤消rsync使用非常奇特的工具集?

答案1

< "$LIST" ssh $HOST xargs -i% rm "$DST/%"

使用单个 ssh 会话。

假设您的列表是文件且不包含目录,则取消选择后者可能会很麻烦。

编辑:为了解释前面的评论,鉴于问题不包括输入文件的样本,必须对此做出假设。

如果输入文件类似于以下内容,我的答案应该能够处理它:

script1.sh
script2.sh
script3.sh

如果你的输入文件是这样的:

script1.sh
script2.sh
somedir/

(IE 有一个完整的目录复制)那么事实证明,知道要删除什么内容会更加困难somedir/(我们必须somedir/在本地枚举并使用该信息来进行清理)。

答案2

您已经有了文件列表,因此最简单的方法(因为您说只有几个脚本)是迭代同一文件(例如file.list)并删除它们。

沿着这些思路:

for r in "$(cat ${LIST})"
do
  ssh "${HOST}" rm "${DST}/$r"
done

相关内容