
私は多くのファイルのリストを処理する問題を処理する方法を見つけようとしています。
2000を超えるファイルのリストがあります。 lsまたはwcを使用してループに入れて各ファイルのファイルサイズを取得しようとすると、n個のファイルの後にls / wcが失敗します。 3~4個のファイルごとに2秒ずつ一時停止するとls/wcが動作するようです。
問題をさらに複雑にするために、rshを使用してリモートサーバーで実行してserver1とserver2のファイルサイズを比較することもできました。ただし、rshを使用しないとローカルで問題が発生しますが、失敗する前により多くのファイルのリストを見てください。
server="xy1"
for CompareList in `cat compare_jnj.txt`
do
rsh $server wc -c /u2/web/$CompareList.java |awk '{print " ",$1," ",$2}'|tr -s " " >> output.out
rsh $server wc -c /u2/web/$CompareList.class |awk '{print " ",$1," ",$2}'|tr -s " " >> output.out
done
私のファイルリストは、ファイル拡張子のないファイルの場所/名前の静的リストです。セキュリティ上の理由から、私が行った作業を大量に削除しましたが、以下は私が使用しているループ/コマンドを示しています。
結果セットにエクスポートするファイル名/サイズを取得するには、ls -lを使用して編集しました。
答え1
あなたのスクリプトがファイル名のリストを取得するために出力を解析ls
(または解析)するようです。wc
これをしないでください。とても悪い考えです。
パイプで区切られた単純なファイル名のリストとサイズ(バイト)を取得するには、次のものを使用できます。
stat -c '%n|%s' /path/to/directory/*
または、ディレクトリツリーを解析します。
find /path/to/directory -type f -exec stat -c '%n|%s' "{}" \;
答え2
以下は、ファイルとそのサイズを一覧表示するために通常ディレクトリツリーに対して実行するコマンドです。
find <directory>/* -type f -print0 | xargs -0 -n1 du -h
ファイルサイズで並べ替えることもできます(作業に役立つと思います)。
find <directory>/* -type f -print0 | xargs -0 -n1 du -h | sort -n -r