我在本地计算机上运行此命令以删除文本文件中包含的文件列表。
xargs rm -r < deletion_list.txt
它会按预期工作,并删除中列出的当前工作目录中的所有文件deletion_list.txt
。
然后sftp
,我用于连接到远程主机,并在本地计算机上创建要从远程主机删除的文件列表。
连接到远程主机后,我一个接一个地输入以下命令:
更改本地工作目录:
lcd /home/user/files_to_delete
在我的本地工作目录中的文件中创建一个文本文件,该文件位于与指定模式匹配的同一目录中:
!ls *.txt > deletion_list.txt
这应该根据deletion_list.txt
本地工作目录中的文件名删除远程主机上的文件,但是会导致“无效命令”错误:
xargs rm -r < /home/user/files_to_delete/deletion_list.txt
为什么这不起作用?
sftp
(请参阅man sftp
)的文档开始
描述sftp是类似于
ftp
(1)的文件传输程序,它通过加密的ssh
(1)传输执行所有操作。
稍后写到
交互命令一旦进入交互模式,就可以
sftp
理解与ftp
(1)类似的一组命令。
并继续使用有效命令集(bye cd chgrp chmod chown df exit get help lcd lls lmkdir ln lpwd ls lumask mkdir progres put pwd quit reget reput rename rm rmdir symlink version ! ?
)。该xargs
命令不在该设置中,因此您无法在sftp
应用程序内部使用它。(请注意,这!
是一个本地外壳转义,它将行的其余部分传递到本地外壳。此类命令从该外壳转义sftp
而不被其处理。)
如果您真的想使用类似的工具xargs
,则应考虑ssh
用于向远程主机提供基于Shell的会话。而不是sftp user@remotehost
您会使用ssh user@remotehost
(假设您的系统管理员允许进行交互式会话)。确认可行后,您可以在主机之间将命令串在一起:
# On the local host
xargs rm -r < deletion_list.txt
# Also on the local host connnecting to the remote
ssh user@remotehost xargs rm -r < delete_list.txt
第二个命令的作用是连接到远程系统并xargs rm -r
在其上运行,并从名为的本地文件中获取其标准输入delete_list.txt
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句