ディレクトリ内のすべてのファイルをcliパラメータとして追加する

ディレクトリ内のすべてのファイルをcliパラメータとして追加する

以下のコマンドを実行する必要があります。

mycli --file test.zip --file another_test.zip

ディレクトリ内のすべてのzipファイルを動的に実行するにはどうすればよいですか? findコマンドでファイルを転送できると確信していますが、そのファイルを他のコマンドに引数として追加する方法がわからないので、bash-fuはお勧めできません。

ベストアンサー1

配列を使用して下さい:

unset -v args
declare -a args
for file in *.zip
do
  args+=( --file "$file" )
done
mycli "${args[@]}"

またはPOSIXとして:

set --
for file in *.zip
do
  set -- "$@" --file "$file"
done
mycli "$@"

または、GNUツールを想定すると、次のようになります。

find . -maxdepth 1 -name '*.zip' -printf '--file\0%f\0' |
  xargs -0 -- mycli

配列ベースの方法と配列ベースの方法xargsの関連の違い:前者は次のように失敗する可能性があります。「パラメータリストが長すぎます」エラー(組み込みコマンドではないと仮定)、後者は何度もmycli実行されず、実行されます。mycliただし、最後の場合は、最後の呼び出しの1つを除くすべてのパラメータのリストが次に終わることが--fileあります(次のパラメータのリストはファイル名で始まります)。ユースケースに応じて、xargs「オプション(など-n-x」を組み合わせることで、これが発生しないようにすることができます。

またfind含まれます。隠しファイル一方、配列ベースの選択肢は、dotglobシェルオプションが Bash に設定されていないか、*.zipPOSIX シェルでグロービング式とその両方が使用されない限り、そうではありません。.*.zip詳細と注意: あるディレクトリから別のディレクトリにすべてのファイル(隠しファイルを含む)を移動するには?

おすすめ記事