特定のディレクトリ内のすべてのファイル(ただし、事前定義されたリストのファイルのリスト)に対していくつかのタスクを実行する使い捨てユーティリティを作成する必要があります。与えられたリストはあらかじめ定義されているので、それを配列にハードコーディングします。
それでは、与えられた配列にないすべてのファイルの名前をどのように取得できますか?これは標準の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