mk-mode BLOG

このブログは自作の自宅サーバに構築した Debian GNU/Linux で運用しています。
PC・サーバ構築等の話題を中心に公開しております。(クローンサイト: GitHub Pages

ブログ開設日2009-01-05
サーバ連続稼働時間
Reading...
Page View 合計
Reading...
今日
Reading...
昨日
Reading...

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

[ サーバ構築 ] [ Linux, Unix, bash, シェル ]

こんばんは。

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

作業メモ

0. 前提条件

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

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

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

1
2
3
4
5
file_20120101.txt
file_20120102.txt
file_20120103.txt
file_20120104.txt
file_20120105.txt

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

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

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

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

1
2
$ 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. タイムスタンプが最新・最古のファイルのファイル名を取得

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

1
2
3
4
5
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]

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

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

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

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

1
2
$ 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 でも意外とよく使うので、記録しておいた次第です。

以上。

Comments