ホームページ > バックエンド開発 > Golang > ワイルドカードを含む「mv」の動作が Go と Bash で異なるのはなぜですか?

ワイルドカードを含む「mv」の動作が Go と Bash で異なるのはなぜですか?

Patricia Arquette
リリース: 2024-12-10 18:48:11
オリジナル
915 人が閲覧しました

Why Does `mv` with Wildcards Behave Differently in Go and Bash?

Go と Bash での mv コマンドの異なる実行

Go では、exec パッケージを使用して mv コマンドを実行すると、使用時に問題が発生する可能性がありますコマンド引数には「*」などのワイルドカードを使用します。コマンドはターミナルでは期待どおりに機能しますが、アスタリスク ワイルドカードは Go スクリプトでは機能しないようです。

この不一致の理由は、シェルと Go がコマンド引数を処理する方法にあります。ターミナルでは、シェルがワイルドカードを解釈し、一致するファイル名のリストに置き換えます。ただし、Go では、コマンドは文字列として渡され、ワイルドカードを文字通り引数の一部として認識します。

この問題を回避するには、2 つのオプションがあります:

ワイルドカードを手動で展開します

Go の filepath.Glob 関数を使用して、ワイルドカードに一致するファイルのリストを取得できますパターンを作成し、個々のファイル名を引数として exec.Command に渡します。例:

files, err := filepath.Glob("./source-dir/*")
if err != nil {
    // Error handling
}

cmd := exec.Command("mv", files, "./dest-dir")
ログイン後にコピー

シェル呼び出しを使用

シェル自体を呼び出して、ワイルドカードを使用して mv コマンドを実行できます。シェルはワイルドカードを解釈し、展開された引数を mv コマンドに渡します。例:

cmd := exec.Command("/bin/sh", "-c", "mv ./source-dir/* ./dest-dir")
ログイン後にコピー

これらのアプローチのいずれかを使用すると、Go スクリプトでワイルドカードが正しく処理されるようになり、意図したとおりに mv コマンドを実行できるようになります。

以上がワイルドカードを含む「mv」の動作が Go と Bash で異なるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート