Используйте команду locate, которая намного быстрее, чем команда find.
$ sudo updatedb # necessary if files in focus were added `cron` daily.
$ printf "Number Files: " && locate -0r "$PWD.*\.c$" | xargs -0 -I{} sh -c 'test ! -L "$1" && echo "regular file"' _ {} | wc -l && printf "Number Dirs.: " && locate -r "$PWD.*\.c$" | sed 's%/[^/]*$%/%' | uniq -cu | wc -l
Number Files: 29
Number Dirs.: 7
Спасибо Муру за его ответ, чтобы помочь мне путем удаления символических ссылок из количества файлов в Unix & amp; Ответ на Linux.
Спасибо Тердону за его ответ $PWD (не направленный на меня) в Unix & amp; Ответ на Linux .
$ cd /
$ sudo updatedb
$ printf "Number Files: " && locate -cr "$PWD.*\.c$"
Number Files: 3523
$ printf "Number Dirs.: " && locate -r "$PWD.*\.c$" | sed 's%/[^/]*$%/%' | uniq -c | wc -l
Number Dirs.: 648
sudo updatedb Обновить базу данных, используемую командой locate, если сегодня были созданы файлы .c или если вы удалили файлы .c сегодня. locate -cr "$PWD.*\.c$" найдите все .c файлы в текущем каталоге и его дочерние элементы ($PWD). Вместо того, чтобы печатать имена файлов и распечатывать счетчик с аргументом -c. Параметр r задает регулярное выражение вместо соответствия по умолчанию *pattern*, которое может дать слишком много результатов. [F20]. Найдите все *.c файлы в текущем каталоге и ниже. Удалите имя файла с sed, оставив только имя каталога. Подсчитайте количество файлов в каждом каталоге с помощью uniq -c. Подсчитайте количество каталогов с помощью wc -l. $ cd /usr/src
$ printf "Number Files: " && locate -cr "$PWD.*\.c$" && printf "Number Dirs.: " && locate -r "$PWD.*\.c$" | sed 's%/[^/]*$%/%' | uniq -c | wc -l
Number Files: 3430
Number Dirs.: 624
Обратите внимание, что количество файлов и количество каталогов изменились. Я полагаю, что все пользователи имеют каталог /usr/src и могут работать над командами с разными значениями в зависимости от количества установленных ядер.
Длинная форма включает время, чтобы вы может видеть, насколько быстрее locate закончилось find. Даже если вам нужно запустить sudo updatedb, он во много раз быстрее, чем один find /.
───────────────────────────────────────────────────────────────────────────────────────────
rick@alien:~/Downloads$ sudo time updatedb
0.58user 1.32system 0:03.94elapsed 48%CPU (0avgtext+0avgdata 7568maxresident)k
48inputs+131920outputs (1major+3562minor)pagefaults 0swaps
───────────────────────────────────────────────────────────────────────────────────────────
rick@alien:~/Downloads$ time (printf "Number Files: " && locate -cr $PWD".*\.c$")
Number Files: 3523
real 0m0.775s
user 0m0.766s
sys 0m0.012s
───────────────────────────────────────────────────────────────────────────────────────────
rick@alien:~/Downloads$ time (printf "Number Dirs.: " && locate -r $PWD".*\.c$" | sed 's%/[^/]*$%/%' | uniq -c | wc -l)
Number Dirs.: 648
real 0m0.778s
user 0m0.788s
sys 0m0.027s
───────────────────────────────────────────────────────────────────────────────────────────
Примечание. Это все файлы на ВСЕ приводах и разделах. т.е. мы можем также искать команды Windows:
$ time (printf "Number Files: " && locate *.exe -c)
Number Files: 6541
real 0m0.946s
user 0m0.761s
sys 0m0.060s
───────────────────────────────────────────────────────────────────────────────────────────
rick@alien:~/Downloads$ time (printf "Number Dirs.: " && locate *.exe | sed 's%/[^/]*$%/%' | uniq -c | wc -l)
Number Dirs.: 3394
real 0m0.942s
user 0m0.803s
sys 0m0.092s
У меня есть три раздела Windows NT NTFS, автоматически смонтированные в /etc/fstab.
$ time (printf "Number Files: " && locate / -c && printf "Number Dirs.: " && locate / | sed 's%/[^/]*$%/%' | uniq -c | wc -l)
Number Files: 1637135
Number Dirs.: 286705
real 0m15.460s
user 0m13.471s
sys 0m2.786s
Требуется 15 секунд, чтобы посчитать 1637135 файлов в 286 705 каталогах. YMMV.
Для детальной разбивки на обработку регулярных выражений команды locate (кажется, не требуется в этом Q & amp; A, но используется на всякий случай), пожалуйста, прочтите следующее: Используйте " locate " в каком-то конкретном каталоге?
Дополнительная информация из последних статей:
sudo updatedb Обновить базу данных, используемую командой locate, если файлы .c были созданы сегодня или если вы HowtoForge - Linux Найдите команду для начинающих (8 примеров) locate -cr "$PWD.*\.c$" найдите все .c файлы в текущем каталоге и его дочерние элементы ($PWD). Вместо того, чтобы печатать имена файлов и распечатывать счетчик с аргументом -c. Параметр r задает регулярное выражение вместо соответствия по умолчанию *pattern*, которое может дать слишком много результатов.вы должны попробовать
apt install gnome-shell-extension-workspaces-to-dock
или установить grom github
wget https://github.com/passingthru67/workspaces-to-dock/archive/master.zip -O /tmp/master.zip
unzip /tmp/master.zip -d /tmp/
#create extension folder if needed
mkdir '~/.local/share/gnome-shell/extensions/'
mv '/tmp/workspaces-to-dock-master/workspaces-to-dock@passingthru67.gmail.com' '~/.local/share/gnome-shell/extensions/workspaces-to-dock@passingthru67.gmail.com'
rm /tmp/master.zip
rm -rf /tmp/workspaces-to-dock-master/
, затем перезапустить gnome-shell (Alt + F2, r, return)
вы должны попробовать
apt install gnome-shell-extension-workspaces-to-dock
или установить из github
wget https://github.com/passingthru67/workspaces-to-dock/archive/master.zip -O /tmp/master.zip
unzip /tmp/master.zip -d /tmp/
#create extension folder if needed
mkdir '~/.local/share/gnome-shell/extensions/'
mv '/tmp/workspaces-to-dock-master/workspaces-to-dock@passingthru67.gmail.com' '~/.local/share/gnome-shell/extensions/workspaces-to-dock@passingthru67.gmail.com'
rm /tmp/master.zip
rm -rf /tmp/workspaces-to-dock-master/
, затем перезапустить gnome-shell (Alt + F2, r, return)
вы должны попробовать
apt install gnome-shell-extension-workspaces-to-dock
или установить grom github
wget https://github.com/passingthru67/workspaces-to-dock/archive/master.zip -O /tmp/master.zip
unzip /tmp/master.zip -d /tmp/
#create extension folder if needed
mkdir '~/.local/share/gnome-shell/extensions/'
mv '/tmp/workspaces-to-dock-master/workspaces-to-dock@passingthru67.gmail.com' '~/.local/share/gnome-shell/extensions/workspaces-to-dock@passingthru67.gmail.com'
rm /tmp/master.zip
rm -rf /tmp/workspaces-to-dock-master/
, затем перезапустить gnome-shell (Alt + F2, r, return)
вы должны попробовать
apt install gnome-shell-extension-workspaces-to-dock
или установить grom github
wget https://github.com/passingthru67/workspaces-to-dock/archive/master.zip -O /tmp/master.zip
unzip /tmp/master.zip -d /tmp/
#create extension folder if needed
mkdir '~/.local/share/gnome-shell/extensions/'
mv '/tmp/workspaces-to-dock-master/workspaces-to-dock@passingthru67.gmail.com' '~/.local/share/gnome-shell/extensions/workspaces-to-dock@passingthru67.gmail.com'
rm /tmp/master.zip
rm -rf /tmp/workspaces-to-dock-master/
, затем перезапустить gnome-shell (Alt + F2, r, return)