リモートコンピュータからファイルを削除する

リモートコンピュータからファイルを削除する

ワイルドカードを含むファイルを削除します。

rm /home/files/*.csv

しかし、SSHを介してリモートコンピュータでコマンドを実行しようとすると

ssh user@ip 'rm /home/files/*.csv'

*.csvファイルを削除しようとしてエラーが発生します。

rm: cannot remove '/home/files/*.csv': No such file or directory

rmワイルドカードを送信する正しい構文は何ですかssh

どちらのマシンにもUbuntu 20.04と標準プログラム(bash、sshなど)があります。

答え1

正しい構文を使用しました。パターンに一致するファイル名がない可能性が高い(実際にはコメントで確認済み)。この場合、シェルはパターンを拡張せずにrm引数として呼び出そうとします。

ローカルを使用しないと、ssh同じ問題が発生します。

$ rm /tmp/wont*match
rm: cannot remove '/tmp/wont*match': No such file or directory

接線ディスカッション:

一部のシェル(たとえば、zshデフォルトのシェル)は、一致しないワイルドカードパターンをエラーとして扱います。つまり、パターンが何も一致しない場合は、コマンドを実行しません。

$ rm /tmp/wont*match
zsh: no matches found: /tmp/wont*match

シェルオプションを使用して、シェルがbash同じように機能するようにすることができますfailglob。次の例ではrm呼び出されません。

$ shopt -s failglob
$ rm /tmp/wont*match
bash: no match: /tmp/wont*match

次の呼び出しで使用できますssh

ssh user@ip 'bash -O failglob -c "rm /home/files/*.csv"'

明らかに削除したいファイル名が見つからないという診断メッセージを無音で使用することができますがrm -f(実際に要求する場合)、終了ステータスも隠されます。rm コマンドが実際に何かを削除したかどうかを確認したい場合

答え2

見つからないファイルを削除することを心配しないでくださいというフラグをrm使用してミュートできます。-f

ssh user@ip 'rm -f home/files/*.csv'

関連情報