関連:ディレクトリ内のファイル数を数える最良の方法は何ですか?
私のシステムのディレクトリには多数のファイルがあります。
$ ls -god xml
drwxrwsrwx 7 7070720 Mar 12 11:51 xml
システムを使用して特定のファイルグループを計算しようとすると、ls xml/*query | wc -l
通常エラーメッセージが生成されます。
/bin/ls: arg list too long
10分間試しましたが、find xml -name '*query' | wc -l
応答がなく、コマンドを終了しました。
$ nohup time find xml -name '*query' -level 0 | wc -l &
[1] 11751
$ ps -f 2>rgb
UID PID PPID C STIME TTY TIME CMD
rgb 11751 10637 0 02:45:11 ttyp12 00:00:00 wc -l
rgb 11752 11751 0 02:45:11 ttyp12 00:00:00 time find xml -name *query -level 0
rgb 11753 11752 77 02:45:11 ttyp12 00:00:03 find xml -name *query -level 0
rgb 11776 10637 1 02:45:17 ttyp12 00:00:00 ps -f
rgb 10583 10581 0 02:30:13 ttyp12 00:00:00 -csh
rgb 10637 10583 2 02:30:19 ttyp12 00:00:00 ksh
top -Urgb
last pid: 11864; load averages: 1.21, 0.82, 0.66 14:48:03
249 processes: 246 sleeping, 2 running, 1 onproc
CPU states: 0.0% idle, 24.5% user, 75.5% system, 0.0% wait, 0.0% sxbrk
Memory: 2048M phys, 1799M max, 1718M free, 1774M locked, 114M unlocked, K swap
PID USERNAME PRI NICE SIZE RES STATE TIME COMMAND
11837 rgb 26 0 804K 804K onpr 0:00 top
11753 rgb 56 4 5512K 5512K run 1:10 find
11751 rgb 51 4 588K 588K sleep 0:00 wc
10583 rgb 48 0 1204K 1204K sleep 0:00 -csh
11752 rgb 48 4 588K 588K sleep 0:00 time
10637 rgb 48 0 1288K 1288K sleep 0:00 ksh
last pid: 12330; load averages: 1.82, 1.45, 1.05 14:58:06
258 processes: 253 sleeping, 4 running, 1 onproc
CPU states: 0.0% idle, 20.7% user, 78.7% system, 0.6% wait, 0.0% sxbrk
Memory: 2048M phys, 1799M max, 1711M free, 1774M locked, 106M unlocked, K swap
PID USERNAME PRI NICE SIZE RES STATE TIME COMMAND
11837 rgb 26 0 804K 804K onpr 0:00 top
11753 rgb -1 4 5512K 5512K run 5:10 find
11751 rgb 51 4 588K 588K sleep 0:00 wc
10583 rgb 48 0 1204K 1204K sleep 0:00 -csh
11752 rgb 48 4 588K 588K sleep 0:00 time
10637 rgb 48 0 1288K 1288K sleep 0:00 ksh
$ jobs
[1] + Running nohup time find xml -name '*query' -level 0 | wc -l &
$ kill %1
[1] + Terminated nohup time find xml -name '*query' -level 0 | wc -l &
ディレクトリサイズ7070720(例:10%以内)のファイル数を変更できますか?与えられたls -god xml
?
追加の質問:これはファイルシステム(UFS、V7FS、HTFSなど)にどの程度依存しますか?
修正する:
このコマンドはls xml | wc -l
数秒以内に値を返します。質問を投稿する前にこれを試してみました。これは私が要求した情報を提供するので、7070720バイトディレクトリにどれだけのファイル名+ inodeエントリが含まれているかを計算する必要はありません(答え:少なくとも260085)。
答え1
ls
出力をソートすると、リソースが無駄になります。 GNUがある場合は、ls
次のようにします。
ls --quoting-style=escape -U xml | wc -l
答え2
n=0; for file in ./*; do let "n += 1"; done; echo $n;
答え3
する
set -- *
echo $#
働く?set
組み込みシェルなので、arg制限の影響を受けないことがあります。これはドットファイルを無視します。より選択的なグローブを使用すると、必要なものを得ることができます。これの良い点は、フォークやチューブが不要なことです。
答え4
このコマンドがソートされていないディレクトリのリストをパイプし、一致数を数える方法は次のとおりです。
$ ls -U ./xml/ | grep -c 'query$'
*nixのデフォルト設定によっては、代わりにls -u
必要になる場合があります。ls -U