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

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

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

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 コマンドが実際に何かを削除したかどうかを確認したい場合

おすすめ記事