すべてのファイルをリストしたいです(絶対パスの使用)変更された日付順に指定されたディレクトリ(サブディレクトリではない)のファイルのみを表示します。 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%/}
$PWD
isは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実装を想定し
find
(cut
それ以外の場合は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
これを最初に行う必要があります。それ以外の場合、ディレクトリにドットファイルやドット以外のファイルがない場合、コマンドは失敗します。