ワイルドカードを含むファイルを削除します。
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'