xargs 命令在本地電腦上執行,但在遠端主機上執行時導致“無效命令”錯誤
我在本地電腦上執行此命令以刪除文本文件中包含的文件列表。
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
應用程序中使用它。(請注意,這!
是一個本地 shell 轉義,它將行的其餘部分傳遞給本地 shell。這樣的命令被轉義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
.