配列のファイルを除くすべてのファイルをインポートする - Bash

配列のファイルを除くすべてのファイルをインポートする - Bash

特定のディレクトリ内のすべてのファイル(ただし、事前定義されたリストのファイルのリスト)に対していくつかのタスクを実行する使い捨てユーティリティを作成する必要があります。与えられたリストはあらかじめ定義されているので、それを配列にハードコーディングします。

それでは、与えられた配列にないすべてのファイルの名前をどのように取得できますか?これは標準のUnixスクリプト(bash、awk、Perl)です。

ベストアンサー1

これにより、bash次のことができます。

all=(*)
except=(file1 file2 notme.txt)
only=()
IFS=/
for file in "${all[@]}"; do
  case "/${except[*]}/" in
    (*"/$file/"*) ;;     # do nothing (exclude)
    (*) only+=("$file")  # add to the array
  esac
done
ls -ld -- "${only[@]}"

(これは現在のディレクトリのファイルに対して機能しますが、検索のために配列要素を連結するためにall=(*/*) except=(foo/bar)使用するなどのグローバル変数には信頼できません/。)

"${array[*]}"これは、配列の要素が(ファイルには表示されないため、$IFSここで選択した最初の文字)に関連付けられているという事実に基づいています。/名前; NULはファイルに現れない文字です。しかし、残念ながらbash(逆にzsh変数にそのような文字を持つことはできません)。したがって、その中の各ファイルについて$all(ここでは$file存在をfoo例として使用)除外するかcase "/file1/file2/notme.txt/" in (*"/foo/"*)どうかを確認します。$file

おすすめ記事