1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

フォルダ内のファイル名を配列で取得するターミナル構文

Posted at

なんかこう…痒いところに手が届かないというか、いつもこの辺の地味なところで手が止まる今日この頃。

半日悩んだ末にやっと出てきたこの構文。

current_path=$(pwd);files=($current_path/*);echo ${files[@]};

このコマンドは、現在のカレントディレクトリのパスを取得し、そのフォルダ内のすべてのファイル名を配列filesに格納します。

構文詳細

今回の構文の詳細を説明します。内容としては、

  1. 現在のパスを取得する
  2. 配列として格納
  3. ターミナル上に表示

といった流れです。

現在のフォルダパスを取得する

current_path=$(pwd)
この部分は、現在のカレントディレクトリのパスを取得し、変数current_pathに格納するコマンドです。

自身では、一度cdでディレクトリを移動した後に作業することが多いので、パスを手打ちしたり、いちいちD&Dでフォルダ持ってきたりはしない前提がありまして。なので、現在位置をpwdで拾い、それを使える状況がベストでして。

ファイル名を配列で

files=($current_path/*)
この部分は、current_pathに格納されたパスを使用して、特定のフォルダ内のすべてのファイル名を配列filesに格納するコマンドです。

そもそもターミナルの使い方に慣れていない筆者で、変数の使い方も怪しいところで…
一度取得したパスを変数に入れ、文字列を追加して使用する、ここにたどり着くにも一苦労でした。

配列に入れたファイル名の取り出し

配列filesを使用して、特定のファイル名を取得することもできます。 例えば、配列filesの最初のファイル名を取得するには、 echo ${files[0]} と入力します。

配列内のすべてのファイル名を一度に表示するには、 echo ${files[@]} が使用できますが、改行されずに、スペース区切りで一気に出てきてしまい、可読性が悪くなります。

隠しファイルについて

配列内のファイル名には、隠しファイルも含まれてしまいます。
隠しファイルを除外するには、files=($current_path/.[^.]*) と書きましょう。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?