bashシェルで要素が存在するかどうかに基づいてパス配列をフィルタリングする方法は?

bashシェルで要素が存在するかどうかに基づいてパス配列をフィルタリングする方法は?

私はbashシェルを使用しています。ファイルパスを表す配列があります

MY_FILES=(/path/to/file1 /tmp/abc.txt /tmp/test.sh /path/to/file2 /path/to/file3 /tmp/abc.txt)

ファイルシステムに実際に存在するパスを使用して新しい要素の配列をどのように形成しますか?

ベストアンサー1

MY_FILES=(/path/to/file1 /tmp/abc.txt /tmp/test.sh /path/to/file2 /path/to/file3 /tmp/abc.txt)

existing=()
for pathname in "${MY_FILES[@]}"; do
    if [ -e "$pathname" ]; then
        existing+=( "$pathname" )
    fi
done

上記のコマンドは、existingファイルシステムの既存の名前に対応する配列のエントリを含む新しい配列を作成します。MY_FILESこれは配列内の項目を繰り返し、testを使用して各要素を順番にテストすることによってこれを行います-e本物与えられたパス名が存在する場合。現在のパス名が存在する場合は、配列の末尾に新しい要素として追加されますexisting

また、各名前が次のようになっていることを確認したい場合一般ファイル-eテストをテストに変更します-f

おすすめ記事