コマンドを使用ls -l
して、フォルダー内のすべてのファイル サイズを確認します。.txt
それをファイルに出力する方法を誰か助けてくれませんか。
6 に答える
あるファイルのサイズだけfoo
をテキスト ファイルに入れたい場合out.txt
は、おそらく
ls -l foo | awk '{print $5}' > out.txt
他にも多くのバリエーションがあります (たとえば、cut
代わりに使用するawk
、またはstat
代わりに使用するls
など)。
VAR
シェルスクリプトまたは端末で、そのサイズを変数に割り当てることができます。
VAR=$(ls -l foo | awk '{print $5}')
他の人が答えたようにls
、単純なリダイレクトのすべての出力に満足している場合は十分です。ls -l foo > out.txt
私はstat(1)
直接使用します:
stat -c '%s %n' *
または再帰的に行う場合:
find /some/path -type f -printf '%s %f\n'
それを行うには、ls -l> yourfile.txt を使用します。
duコマンドを使用できます。
du * > file.txt
duはファイルのスペース使用量を返すため、ディレクトリ内のすべてのファイルが必要な場合は、* を使用する必要があります
例:
$ cd /path/to/directory
$ du * > file.txt
また
$ du /path/to/directory/* > /path/to/file.txt
編集:質問はリダイレクトに関するものだったので、これはかなり話題から外れていることに気付きました.
du
バイトではなくブロックを表示するのが好きな理由がわかりません。
ls -l $1 | awk '{ print $5 }'
個人的には、処理が多すぎると思います。適切なエラー処理を期待するのであれば無理です。
私にとって、最も簡単なオプションは、より効率的なものをコンパイルすることです。
$nano flsz.c
#include <stdio.h>
int main(int argc, char **argv) {
if (argc > 1) {
FILE *f = fopen(argv[1], "r");
if (f && (fseek(f, 0, SEEK_END) == 0)) {
int size = ftell(f);
fclose(f);
fprintf(stdout, "%d\n", size);
} else {
fprintf(stdout, "0\n");
}
} else {
fprintf(stdout, "-1\n");
}
return 0;
}
$gcc -o /usr/bin/flsz flsz.c
$flsz flsz.c
340
$flsz /usr/bin/flsz > output.txt
$cat output.txt
8972