GNU/Linux >> Linux の 問題 >  >> Linux

すべてのファイルを取得しますが、ファイルは配列内にあります– Bash?

特定のディレクトリ内のすべてのファイルに対して何らかの操作を実行する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かどうかを確認します 除外されます。


Linux
  1. Bashが実行されているTtyを取得する方法は?

  2. 特定のサイズを超えるファイルをすべて取得して削除する方法

  3. bash:リスト ファイルを変数に入れますが、配列のサイズは 1 です

  1. bashでファイルの絶対ディレクトリを取得するにはどうすればよいですか?

  2. Git リポジトリを削除しますが、すべてのファイルを保持します

  3. bashスクリプトで最新の3つを除くすべてのファイルを削除します

  1. ターミナルでマスクごとにすべてのファイルのリストを取得しますか?

  2. 実際のディレクトリ サイズを (du から) 取得する方法は?

  3. ディレクトリ内の 1000 個を除くすべてのランダム ファイルを削除する