特定のディレクトリ(絶対パスを指定)のすべてのファイル(絶対パスを含む)を変更日順に一覧表示したいと思います。

特定のディレクトリ(絶対パスを指定)のすべてのファイル(絶対パスを含む)を変更日順に一覧表示したいと思います。

すべてのファイルをリストしたいです(絶対パスの使用)変更された日付順に指定されたディレクトリ(サブディレクトリではない)のファイルのみを表示します。 ls /path_to_dir -t は変更日に基づいてファイルをリストしますが、フルパスを提供しません。追加の説明:私の作業ディレクトリは/home/emirates/Codeです。
私がリストしたい作業ディレクトリから:

  • 絶対パス全体を持つファイルのみ
  • ファイルの変更順序に応じて
  • /var/reports ディレクトリから
  • 私の作業ディレクトリは変更される可能性があります。つまり、本番環境ではどこにいても構いません。

答え1

そしてzsh

print -rC1 -- ${PWD%/}/path_to_dir/*(NDom.) # regular files only

print -rC1 -- ${PWD%/}/path_to_dir/*(NDom^/) # any type of file except
                                             # directory (so includes
                                             # symlinks, fifos, devices,
                                             # sockets... in addition to
                                             # the regular files above)

print -rC1 -- ${PWD%/}/path_to_dir/*(NDom-^/) # any type except directory 
                                              # but this time the type is
                                              # determined after symlink
                                              # resolution so would also
                                              # exclude symlinks to
                                              # directories.

print -rC1 -- ${PWD%/}/path_to_dir/*(ND-om^/) # same but also use the
                                              # modification time of the target
                                              # of symlinks when sorting

print -rC1 -- path_to_dir/*(ND-om^/:P) # same but print the real path for each
                                       # file. That is, make sure it's absolute
                                       # and none of the path components
                                       # are symlinks.

${PWD%/}$PWDisはyesの場合を処理するので、noを/取得します。/path_to_dir/files//path_to_dir/files

これは${PWD%/}/ただプレフィックスです。比較的パス(例path_to_dir)は、すでに絶対パス(例)ではなく絶対パスにします/absolute/path_to_dir

だからあなたのために/var/reports使用してくださいprint -rC1 -- /var/reports/*(...)

答え2

あなたはそれを使用することができますfind

GNU実装を想定しfindcutそれ以外の場合はsort 非テキスト処理用に移植可能ではない)、ファイルパスに改行文字が含まれていないことに注意してください。また、ディレクトリは除外されますが、シンボリックリンク(通常のファイルを指すかどうかにかかわらず)、fifo、デバイス、ソケットなど、他のすべての非正規タイプのファイルも除外されます。

find "$PWD/relative_path" -maxdepth 1 -type f -printf "%T@\0%p\n"| sort -rn | cut -d '' -f2

maxdepth再帰レベルを知らせながら、指定されたパスのファイルを一覧表示します。


次から借りるUnix/Linux の検索と変更された日付で並べ替え

答え3

パスに改行文字がないとします。

ls -ltd "$PWD/relative_path/"* | grep -v '^d'

現在のディレクトリのファイルを一覧表示するには、そのファイルを削除するだけです/relative_path。もちろん、絶対パスをすぐに提供することもできます。

ls -ltd "/var/reports/"* | grep -v '^d'

ドットファイルを一覧表示するには、BashとKshで簡単に置き換えることができます*{*,.*}Zshでは、setopt cshnullglobこれを最初に行う必要があります。それ以外の場合、ディレクトリにドットファイルやドット以外のファイルがない場合、コマンドは失敗します。

から適応https://stackoverflow.com/a/5580868

関連情報