特定のディレクトリ内のすべてのファイルに対して何らかの操作を実行する1回限りのutilを作成する必要がありますが、事前定義されたリスト内のファイルのリストを作成する必要があります。指定されたリストは事前定義されているため、配列としてハードコーディングします。
そうは言っても、指定された配列にないすべてのファイルの名前を取得するにはどうすればよいですか?これは、任意の標準のunixスクリプト(bash、awk、perl)に含めることができます。
承認された回答:
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
の最初の文字と結合します (ここでは /
に選択されています 他の方法ではファイルnameでは発生しないため; NULは、ファイルのパスに出現できない文字です。 、しかし残念ながら bash
( zsh
とは異なります )その変数にそのような文字を含めることはできません)。したがって、 $ all
内のファイルごとに (ここでは $ file
foo
であること 例として)、(* "/ foo /" *)でcase"/file1/file2/notme.txt/"を実行します。
$ file
かどうかを確認します 除外されます。