以下のコマンドを実行する必要があります。
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 に設定されていないか、*.zip
POSIX シェルでグロービング式とその両方が使用されない限り、そうではありません。.*.zip
詳細と注意:
あるディレクトリから別のディレクトリにすべてのファイル(隠しファイルを含む)を移動するには?。