テキストファイルに含まれているファイルのリストを削除するには、ローカルコンピュータでこのコマンドを実行します。
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
sftp
man sftp
(のマニュアルを参照してください。
説明する
ftp
sftpは、暗号化された(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
。