ど素人から毛を生やす。<延>

[Linux]lsした結果をcatする

Web > Other 2025年5月17日(最終更新:0日前)

どもです。
shell_exec()で、あるディレクトリの最新ファイルの中身を取得したい。

linuxコマンドで最新ファイル名を取得するのは

ls -rt | tail -n 1

とか、

ls -t | head -1 | tail -1

とか。
指定したファイルを開いて標準出力するのは、

cat ファイル名

では、最新ファイルを開いて標準出力する(lsした結果をcatする)のは?

cat $(ls -t | head -1 | tail -1 | cat)

Q. なぜこんなややこしいことに?
A. ls の戻り値は配列なので、文字列に変換しないといけないため。

Q. なんで cat が2つあるの?
A. 左の cat は「ファイルを読み込む」、右の cat は「標準出力に流し込む」ためのもの。

lsの結果をcatで文字列として出力、出力された文字列をファイル名としてcatで読み込みにいく。
という処理の流れになる。

shell_execで実行する場合は、

shell_exec("ssh *****@000.00.0.000 'cd /*****/; cat $(ls -t | grep .log | head -1 | tail -1 | cat)' 2>&1");

といった感じ。
「2>&1」だと文字列として取得することになるので、ファイルが大きいなら一時ファイルに落としてしまおう。

linuxとかshellとかはど素人も甚だしいが、なんとか要件を満たすことができた。

この記事は役に立ちましたか?
  • _(:3」∠)_ 面白かった (0)
  • (・∀・) 参考になった (0)
  • (`・ω・´) 役に立った (0)