[PHP]いちばん新しい/古いファイルを取得する
9703 ワード
1. 概要
PHPでいちばん新しい/古い1ファイルを取得する方法
exec関数(外部プログラムを実行する関数)でスッキリ1行に収めてます
2. コード
(1) Linuxコマンド
まずは、元となる(execで実行させる)Linuxコマンドから
ls, grepのオプションとtail, headをうまく組み合わせる
# カレントディレクトリでタイムスタンプのいちばん古いファイル or ディレクトリを取得
ls -t | tail -n 1
# カレントディレクトリでタイムスタンプの3番目に古いファイル or ディレクトリを取得
ls -t | tail -n 3 | head -n 1
# カレントディレクトリでタイムスタンプのいちばん新しいファイル or ディレクトリを取得
ls -tr | tail -n 1
# カレントディレクトリでタイムスタンプの3番目に新しいファイル or ディレクトリを取得
ls -tr | tail -n 3 | head -n 1
# カレントディレクトリでタイムスタンプのいちばん古いjsonファイルを取得
ls -t *.json | tail -n 1
# testディレクトリ下のタイムスタンプのいちばん古いファイルを取得
ls -Ft ./test/ | grep -v / | tail -n 1
# testディレクトリ下のタイムスタンプのいちばん新しいディレクトリを取得
ls -Ftr ./test/ | grep / | tail -n 1
(2) PHP
exec関数の第1引数に実行したいLinuxコマンドを記述するだけ
// カレントディレクトリでタイムスタンプのいちばん古いファイル or ディレクトリを取得
$result = exec('ls -t | tail -n 1');
echo $result."\n";
// カレントディレクトリでタイムスタンプの3番目に古いファイル or ディレクトリを取得
$result = exec('ls -t | tail -n 3 | head -n 1');
echo $result."\n";
// カレントディレクトリでタイムスタンプのいちばん新しいファイル or ディレクトリを取得
$result = exec('ls -tr | tail -n 1');
echo $result."\n";
// カレントディレクトリでタイムスタンプの3番目に新しいファイル or ディレクトリを取得
$result = exec('ls -tr | tail -n 3 | head -n 1');
echo $result."\n";
// カレントディレクトリでタイムスタンプのいちばん古いjsonファイルを取得
$result = exec('ls -t *.json | tail -n 1');
echo $result."\n";
// testディレクトリ下のタイムスタンプのいちばん古いファイルを取得
$result = exec('ls -Ft ./test/ | grep -v / | tail -n 1');
echo $result."\n";
// testディレクトリ下のタイムスタンプのいちばん新しいディレクトリを取得
$result = exec('ls -Ftr ./test/ | grep / | tail -n 1');
echo $result."\n";
3. 向いてないパターン
複数ファイル取得するパターン
例えば、カレントディレクトリで4,5番目に新しいファイルを取得する場合
コマンドと実行結果
$ ls -Ft ./test/ | grep -v / | tail -n 3 | head -n 2
waltz.txt
bar.txt
PHPの場合は以下の通り
testExec.php
<?php
$result = exec('ls -tr | tail -n 5 | head -n 2');
echo $result."\n";
実行結果は以下の通り
testExec.php野実行結果
$ php ../testExec.php
string(7) "bar.txt"
細かいところは置いておいて、bar.txtのみが出力され、waltz.txtは出力されない
→ exec関数は 「コマンド結果の最後の行を返す」 ため
こういう場合はループ文とか使ったほうがよさそう
4. 参考
- exec | php.net
- lsコマンドの使い方と覚えたい15のオプション【Linuxコマンド集】 | エンジニアの入り口
- 【 head 】コマンド/【 tail 】コマンド――長いメッセージやテキストファイルの先頭だけ/末尾だけを表示する | atmarkIT
- grepコマンドの詳細まとめました【Linuxコマンド集】| エンジニアの入り口
Author And Source
この問題について([PHP]いちばん新しい/古いファイルを取得する), 我々は、より多くの情報をここで見つけました https://zenn.dev/c_hero/articles/f71a75e5930025著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol