Linux - ディレクトリからファイル名取得!

Updated:


Linux(Unix 含む) であるディレクトリ内にあるファイルの中から、ファイル名を取得するコマンドについてのメモです。 bash 等のシェルスクリプト内で結構使うので記録しておきます。

作業メモ

0. 前提条件

  • Cygwin 1.7.15 での作業を想定していますが、Linux, BSD でも同様です。

1. ファイル名昇順で先頭・末尾のファイル名を取得

たとえば、あるフォルダに以下のようなファイル名に日付を使用しているファイルがあり、

file_20120101.txt
file_20120102.txt
file_20120103.txt
file_20120104.txt
file_20120105.txt

昇順で一番先頭になるファイル又は一番末尾になるファイルのファイル名を取得するには、以下のようなコマンドを使用する。

【ファイル名が昇順で先頭になるファイル】

$ ls -l file_*.txt | head -n 1 | gawk '{print $9}'
$ file_20120101.txt

【ファイル名が昇順で末尾になるファイル】

$ ls -l file_*.txt | tail -n 1 | gawk '{print $9}'
$ file_20120105.txt
  • “ls -l file_.txt” で “file_.txt” というファイル名のファイル一覧を昇順で取得
  • “head -n 1” で先頭の1件を取得
  • “tail -n 1” で末尾の1件を取得
  • “gawk ‘{print $9}’” で複数ある情報の中から9番目の情報(ファイル名)を取得 (環境によっては9番目でない可能性もある)

2. タイムスタンプが最新・最古のファイルのファイル名を取得

たとえば、あるフォルダに以下のようなファイル名・タイムスタンプのファイルがあり、

file_a.txt [2012/01/02 22:12:42]
file_b.txt [2012/01/01 21:22:32]
file_c.txt [2012/01/03 20:32:22]
file_d.txt [2012/01/05 23:42:12]
file_e.txt [2012/01/04 22:52:52]

タイムスタンプが一番新しいファイル又は一番古いファイルのファイル名を取得するには、以下のようなコマンドを使用する。

【タイムスタンプが最新のファイル】

$ ls -lt file_*.txt | head -n 1 | gawk '{print $9}'
$ file_d.txt

【タイムスタンプが最古のファイル】

$ ls -lt file_*.txt | tail -n 1 | gawk '{print $9}'
$ file_b.txt
  • “ls -lt file_.txt” で “file_.txt” というファイル名のファイル一覧をタイムスタンプ降順で取得
  • “head -n 1” で先頭の1件を取得
  • “tail -n 1” で末尾の1件を取得
  • “gawk ‘{print $9}’” で複数ある情報の中から9番目の情報(ファイル名)を取得 (環境によっては9番目でない可能性もある)

Cygwin でも Linux でも意外とよく使うので、記録しておいた次第です。

以上。





 

Sponsored Link

 

Comments