まず、これは次のように重複しません。Linux lsはファイル名の日付とサイズのみを表示します。
実際のディレクトリ名をさらに印刷したいからです。
私はいつも次のコマンドを使います。
ls -l | awk '{print $5, $9}'
各ファイルのサイズと名前を取得します。
ただし、今度はファイルディレクトリをさらに印刷する必要があります。現在のディレクトリがある場合は、次のように/path/to/somewhere
します。
somewhere/file 1234
somewhere/other-file 4567
そして同様に
file 1234
other-file 4567
それは可能ですか?
答え1
各ファイル名の前に現在のディレクトリを追加することを意味しますか?
ls -l | awk '{printf("%s %s/%s\n", $5, ENVIRON["PWD"], $9); }'
それとも別のものですか?
いいね、確かにあなたが望むもの
$ cd /some/path/to/somewhere
$ <insert command here>
somewhere/file1 size1
somewhere/file2 size2
...
はいそれ正しいですか?
その場合(POSIXシェルを想定して)、必要な変更は次のとおりです。
ls -l | DIR=${PWD##*/} awk '{printf("%s/%s %s\n", ENVIRON["DIR"], $9, $5); }'
代わりに。
はエラーが使用中であることを示すtcsh
ため、次のようにします。Illegal variable name
ls -l | env DIR=$PWD:t:q awk '{printf("%s/%s %s\n", ENVIRON["DIR"], $9, $5); }'
代わりに。
その場合まだ動作しません。質問にプラットフォーム、シェル、awkバージョンなどを説明してください。コメントスレッドが長すぎて推測できる内容が不足しています。 :-)
答え2
「ls出力を解析しない」という精神で?を使用しないのはなぜですかfind
?
find . -mindepth 1 -maxdepth 1 -printf '%p\t%s\n'
(これは拡張子がGNUであると仮定しますfind
。-printf
)
ファイルのフルパスが必要な場合は、次のよう.
に置き換えます"$PWD"
(または$PWD:q
使用されている場合)。tcsh
対照的にls
隠しファイルが含まれており、ファイルのリストを並べ替えません。
答え3
$ du -b
人が読めるサイズの場合:
$ du -bh
答え4
私はあなたが必要だと思いますls
:
ls -sh1 /var/log/mysql/*
0 /var/log/mysql/mysqld.log
4.0K /var/log/mysql/mysqld.log-20140718
4.0K /var/log/mysql/mysqld.log-20140827
4.0K /var/log/mysql/mysqld.log-20140829
-s
各ファイルの印刷サイズ-h
人が読めるサイズで印刷-1
各ファイルを新しい行に印刷*
ワイルドカードワイルドカードはフルパスの印刷を「有効にする」。- オプション:
-S
サイズで並べ替え - オプション:
-t
時系列で並べ替え