現在のディレクトリのファイルメタデータを次の形式で表示する必要があります。
最初の列は左揃えにし、2番目の列は中央揃えにし、3番目の列は端末画面の右端に右揃えにする必要があります。
答え1
GNUを使用する(システムで利用find
可能):gfind
find . -mindepth 1 -maxdepth 1 -printf '%-58P %TF %AF\n'
ファイル名、最後の変更日(必要に応じてファイルコンテンツの作成日)、最後のアクセス日をYYYY-mm-dd形式で印刷します。
過去365日間にアクセスしなかったファイルに制限するには、次の手順を実行します.txt
。.bkp
find . -mindepth 1 -maxdepth 1 \
\( -name '*.txt' -o -name '*.bkp' \) \
-atime +364 -printf '%-58P %TF %AF\n'
ファイル名に制御文字、マルチバイト文字、幅0の文字、または二重幅文字が含まれていない場合、および58バイトを超えない限り、列をソートする必要があります。
最初の列は左揃えになり、3番目の列は右揃え(端末幅は80列と仮定)、2番目の列はファイル名のスペースを確保するために右に移動されます。ファイル名を中央に配置するには、ファイル名の幅と間隔を調整します。
ファイルのリストはソートされません。
ast-open ls
(またはls
ksh93の組み込み機能が組み込まれている場合)を使用してください。
ls -AZ '%-58(name)Ls %(mtime:%F)s %(atime:%F)s'
マルチバイト、幅が 0 の文字、幅が 2 つの文字のソートが維持され、リストがソートされる必要があります。
そしてzsh
:
#! /bin/zsh -
zmodload zsh/stat
for f (*(DN)) {
stat -LH s -F %F -- $f &&
printf '%-58s %s %s\n' $f $s[mtime] $s[atime]
}
過去365日間にアクセスしなかったファイルに制限するには、.txt
に置き換えます。.bkp
*(DN)
*.(txt|bkp)(DNa+364)
マルチバイト文字のソートは維持し、ファイル名はソートする必要があります。
通常どおり信頼できる方法で変更およびアクセス時間を取得する標準コマンドがないため、最良のオプションはおそらく次のように使用することですperl
。
perl -MPOSIX -Mlocale -Mopen=locale -MEncode::Locale -MEncode -e '
opendir D, "." || die "open .: $!\n";
for (
sort {$a->[1] cmp $b->[1]}
map {[$_, decode(locale => $_)]}
grep {!/^\.{1,2}\z/}
readdir D
) {
if (@s = lstat$_->[0]) {
printf("%-58s %s %s\n", $_->[1],
map {strftime("%Y-%m-%d", localtime $_)} ($s[9], $s[8]))
} else {warn "$_: $!\n"}
}'
このzsh
方法と同様に、マルチバイト文字の並べ替えを維持し、ロケールの組み合わせに従ってファイル名を並べ替える必要があります。
Solaris 10 に同梱されているバージョンはかなり古いため、perl
ファイル名の ASCII 以外の文字のサポートを中止する必要がある場合があります。これは次のように単純化されます。
perl -MPOSIX -e '
opendir D, "." || die "open .: $!\n";
for (sort grep {!/^\.{1,2}\z/} readdir D) {
if (@s = lstat$_) {
printf("%-58s %s %s\n", $_,
map {strftime("%Y-%m-%d", localtime $_)} ($s[9], $s[8]))
} else {warn "$_: $!\n"}
}'
過去365日間にアクセスしなかったファイルに制限するには、.txt
次のように置き換えます。.bkp
!/^\.{1,2}\z/
/\.(txt|bkp)\z/ && -A > 365