私は多くのシンボリックリンクと巨大なサブディレクトリを持つディレクトリを持っています。親ディレクトリにあるファイルの詳細リスト(時系列でソート)を取得したいがファイルがシンボリックリンクの場合は、リンクをターゲットに置き換えます。
このコマンドはreadlink -f * | sort | uniq
シンボリックリンクを処理します。だからあなたは思うでしょう
ls -alt `readlink -f * | sort | uniq`
単にコマンド出力を時間でソートしますreadlink
。ただし、親ディレクトリのコンテンツだけでなく、すべての子ディレクトリのコンテンツも返されます。目的の出力(時間ごとにソートされたリストなど)を取得する方法ただ親ディレクトリにファイルを保存し、リンクをターゲットに変更しますか?どんなアドバイスもありがとうございます。
ベストアンサー1
zsh
GNUを使用するとls
:
files=(*(NDoN:P))
(($#files)) && ls -ltd -- ${(u)files}
または、簡潔にするために匿名関数を使用してください。
(){ (($#)) && ls -ltd -- ${(u)@}; } *(NDoN:P)
をN
有効にしnullglob
、D
dotglob
隠しファイルを含め、mtimeベースの並べ替えをスキップしoN
、GNUと同じことを行います。パラメータ拡張フラグは、配列から重複エントリを削除します。ls
:P
readlink -f
(u)
または、現在のディレクトリにファイルが多すぎると、上記の操作は失敗します。あまりにも議論するエラーが発生しました。zsh
リストを並べ替えて渡すとls -U
(セルフソートを無効にするにはGNUまたは互換バージョンが必要です)、ls
必要に応じてリストをより小さなチャンクに分割zargs
できます。xargs
autoload zargs
files=(*(ND-om:P))
zargs -r --eof= -- ${(u)files} '' ls -lUd --
シンボリック-om
リンクは、解決後の修正時間に基づいてソートされます。
(現在のブロックは、解決に無限ループを持つシンボリックリンクでzsh
発生します。):P
GNUツールを使用すると、bash
次のことができます。
shopt -s nullglob dotglob
files=(*)
((${#files[@]})) &&
printf '%s\0' "${files[@]}" | # prints as NUL-delimited records
xargs -r0 readlink -zf -- | # get absolute canonical path
LC_ALL=C sort -zu | # removes duplicates
xargs -r0 stat --printf '%.9Y/%n\0' -- | # get mtime with max precision
sort -rnz | # sort numerically in reverse
cut -zd/ -f2- | # remove timestamp added earlier
xargs -r0 ls -lUd -- # pass to as many ls invocations as needed
ファイルのリストが十分に小さい場合は、次のように単純化できます。
shopt -s nullglob dotglob
files=(*)
((${#files[@]})) &&
readlink -zf -- "${files[@]}" | # get absolute canonical path
LC_ALL=C sort -zu | # removes duplicates
xargs -r0 ls -ltd -- # pass to ls
NULで区切られたレコードでツール間でファイルのリストを常に渡す方法を学びます。 NULはファイルパスには現れない唯一の文字(およびバイト値)なので、唯一の安全なアプローチです。
では、readlink -f * | sort
改行で区切られたレコードにファイルのリストを渡すため、改行readlink
をsort
含むファイル名が破損します。また、--
以前に出てきた名前を忘れてしまったので。*
で始まるファイル名が壊れます。-
では、状況ははるかに悪いですls -alt `cmd`
。今回は、出力がcmd
空白、タブ、および改行(デフォルトとして仮定$IFS
)に分割され、ファイル名の生成が結果の単語に対して実行されるため、より多くの文字がブロックされます。そうでない場合にもリストされます-d
。ls
コンテンツこれは、ディレクトリ自体だけでなく、引数として渡されたディレクトリの一部です。