我在本地计算机上运行此命令以删除文本文件中包含的文件列表。
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
开始过了一会儿,它写道,
并继续执行一组有效命令 (
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
应用程序中使用它。(请注意,这!
是一个本地 shell 转义,它将行的其余部分传递给本地 shell。这样的命令被转义sftp
而不被它处理。)如果您真的想使用类似的工具,
xargs
您应该考虑使用ssh
来为远程主机提供基于 shell 的会话。而不是sftp user@remotehost
你会使用ssh user@remotehost
(假设你的系统管理员允许交互式会话,也就是说)。确认此方法有效后,您可以跨主机将命令串在一起:第二条命令的作用是连接到远程系统并
xargs rm -r
在其上运行,从名为delete_list.txt
.