バックアップの目的で1つのファイルへの複数のファイルパスがあるので、atの ".csv"に基づいてフィルタリングしたいと思います。試してみました。
filesall=(/home/abc/allfiles/*)
files=$((${filesall[@]}|grep -F ".csv"))
files=$(${filesall[@]}|grep -oe "*.csv")
ただし、.csvファイルを抽出することはできません。$filesall。私もこれができることを知っています
files=(/home/abc/allfiles/*.csv)
提案がある場合は、どのようにファイルからすべての.csvファイルを取得できますか?ありがとうございます。
答え1
これは実際には最善のアプローチではありません。配列を解析する理由は何ですか?より簡単な方法は次のとおりです。
path=/home/abc/allfiles
filesall=(${path}/*)
files=(${path}/*.csv)
自分のやり方でやろうとするなら、次のようにしなければなりません。
files=($(for file in "${filesall[@]}"; do [[ $file =~ \.csv$ ]] && echo $file; done))
または
files=($(printf "%s\n" "${filesall[@]}" | grep '\.csv$'))
ただし、ファイル名にスペースが含まれている場合、上記の両方が壊れます。 (前にスペースを追加saveIFS="$IFS"; IFS=$'\n'
し、後に来るとスペースと一緒に機能させることができますが、IFS="$saveIFS"
それでも改行では中断されます。)
答え2
terdonの答えに基づいて動作する答えは次のとおりです。
すべてのファイル=(すべてのファイル) File=();"${filesall[@]}" のファイルの [[ $file =~ \.csv$ ]] && files+=("$file");