Go では、exec パッケージを使用して外部コマンドを実行します。ワイルドカード (「./source-dir/*」) を使用して「mv」コマンドを実行しようとすると、「終了ステータス 1」のエラーが発生し、「そのようなファイルまたはディレクトリはありません」という出力が表示されます。ただし、ワイルドカードを使用してターミナルで同じコマンドを実行すると成功します。
シェルとは異なり、シェルはワイルドカードを解釈して、一致するリストに展開します。ファイルの場合、exec パッケージはワイルドカードを文字通り単一の引数として扱います。これは、「mv」コマンドがファイル名のリストではなくワイルドカード (「*」) を認識することを意味します。
Go でワイルドカードを使用するには、次の 2 つの方法があります。
import "path/filepath" files, err := filepath.Glob("./source-dir/*") if err != nil { // Handle error } cmd := exec.Command("mv", files...)
cmd := exec.Command("/bin/sh", "-c", "mv ./source-dir/* ./dest-dir")
すべてのファイルをソース ディレクトリから宛先ディレクトリに再帰的に移動するには、ソース ディレクトリを再帰的に反復処理し、移動する必要があります。見つかった各ファイルまたはディレクトリ。ソースにサブディレクトリが含まれている場合は、各サブディレクトリを再帰的に移動するか、ツリーを移動するための機能を提供する os などのパッケージを使用できます。
以上がターミナルは成功するのに、ワイルドカードを使用すると go `exec.Command` が失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。