lsは、ディレクトリ/ファイル名とサイズのみを表示します。

lsは、ディレクトリ/ファイル名とサイズのみを表示します。

まず、これは次のように重複しません。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時系列で並べ替え

関連情報