xargsコマンドはローカルコンピュータで実行されますが、リモートホストで実行すると「無効なコマンド」エラーが発生します。

xargsコマンドはローカルコンピュータで実行されますが、リモートホストで実行すると「無効なコマンド」エラーが発生します。

テキストファイルに含まれているファイルのリストを削除するには、ローカルコンピュータでこのコマンドを実行します。

xargs rm -r < deletion_list.txt

期待どおりに機能し、現在の作業ディレクトリにリストされているすべてのファイルを削除しますdeletion_list.txt

次に、それを使用してsftpリモートホストに接続し、リモートホストから削除するファイルのリストをローカルコンピュータに作成します。

リモートホストに接続するときは、次のコマンドを1つずつ入力します。

ローカル作業ディレクトリを変更します。

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

なぜこれがうまくいかないのですか?

ベストアンサー1

sftpman sftp(のマニュアルを参照してください。

説明するftpsftpは、暗号化された(1)転送を介してsshすべての操作を実行する(1)に似たファイル転送プログラムです。

しばらくしてこのように書いた。

対話型コマンドインタラクティブモードに入った後(1)のようなコマンドsftpセットを理解してください。ftp

有効な命令セット(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代わり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

2番目のコマンドの目的は、リモートシステムに接続してxargs rm -r実行してデータを提供することです。標準入力というローカルファイルからdelete_list.txt

おすすめ記事