Я предлагаю небольшой командный столбец bash с двумя основными командами (и переменной filetype, чтобы было легко переключиться, чтобы искать другие типы файлов).
Он не ищет или в символических ссылках, только обычные файлы.
#!/bin/bash
filetype=c
#filetype=pdf
# count the 'filetype' files
find -type f -name "*.$filetype" -ls|sed 's#.* \./##'|wc -l | tr '\n' ' '
# count directories containing 'filetype' files
find -type d -exec bash -c "ls -AF '{}'|grep -e '\.'${filetype}$ -e '\.'${filetype}'\*'$ > /dev/null && echo '{} contains file(s)'" \;|grep 'contains file(s)$'|wc -l
Это более подробная версия, которая также рассматривает символические ссылки, [!d4 ]
#!/bin/bash
filetype=c
#filetype=pdf
# counting the 'filetype' files
echo -n "number of $filetype files in the current directory tree: "
find -type f -name "*.$filetype" -ls|sed 's#.* \./##'|wc -l
echo -n "number of $filetype symbolic links in the current directory tree: "
find -type l -name "*.$filetype" -ls|sed 's#.* \./##'|wc -l
echo -n "number of $filetype normal files in the current directory tree: "
find -type f -name "*.$filetype" -ls|sed 's#.* \./##'|wc -l
echo -n "number of $filetype symbolic links in the current directory tree including linked directories: "
find -L -type f -name "*.$filetype" -ls 2> /tmp/c-counter |sed 's#.* \./##' | wc -l; cat /tmp/c-counter; rm /tmp/c-counter
# list directories with and without 'filetype' files (good for manual checking; comment away after test)
echo '---------- list directories:'
find -type d -exec bash -c "ls -AF '{}'|grep -e '\.'${filetype}$ -e '\.'${filetype}'\*'$ > /dev/null && echo '{} contains file(s)' || echo '{} empty'" \;
echo ''
#find -L -type d -exec bash -c "ls -AF '{}'|grep -e '\.'${filetype}$ -e '\.'${filetype}'\*'$ > /dev/null && echo '{} contains file(s)' || echo '{} empty'" \;
# count directories containing 'filetype' files
echo -n "number of directories with $filetype files: "
find -type d -exec bash -c "ls -AF '{}'|grep -e '\.'${filetype}$ -e '\.'${filetype}'\*'$ > /dev/null && echo '{} contains file(s)'" \;|grep 'contains file(s)$'|wc -l
# list and count directories including symbolic links, containing 'filetype' files
echo '---------- list all directories including symbolic links:'
find -L -type d -exec bash -c "ls -AF '{}' |grep -e '\.'${filetype}$ -e '\.'${filetype}'\*'$ > /dev/null && echo '{} contains file(s)' || echo '{} empty'" \;
echo ''
echo -n "number of directories (including symbolic links) with $filetype files: "
find -L -type d -exec bash -c "ls -AF '{}'|grep -e '\.'${filetype}$ -e '\.'${filetype}'\*'$ > /dev/null && echo '{} contains file(s)'" \; 2>/dev/null |grep 'contains file(s)$'|wc -l
# count directories without 'filetype' files (good for checking; comment away after test)
echo -n "number of directories without $filetype files: "
find -type d -exec bash -c "ls -AF '{}'|grep -e '\.'${filetype}$ -e '\.'${filetype}'\*'$ > /dev/null || echo '{} empty'" \;|grep 'empty$'|wc -l
Из короткого shellscript:
$ ./ccntr
29 7
Из подробного shellscript:
$ LANG=C ./c-counter
number of c files in the current directory tree: 29
number of c symbolic links in the current directory tree: 1
number of c normal files in the current directory tree: 29
number of c symbolic links in the current directory tree including linked directories: 42
find: './cfiles/2/2': Too many levels of symbolic links
find: './cfiles/dirlink/2': Too many levels of symbolic links
---------- list directories:
. empty
./cfiles contains file(s)
./cfiles/2 contains file(s)
./cfiles/2/b contains file(s)
./cfiles/2/a contains file(s)
./cfiles/3 empty
./cfiles/3/b contains file(s)
./cfiles/3/a empty
./cfiles/1 contains file(s)
./cfiles/1/b empty
./cfiles/1/a empty
./cfiles/space d contains file(s)
number of directories with c files: 7
---------- list all directories including symbolic links:
. empty
./cfiles contains file(s)
./cfiles/2 contains file(s)
find: './cfiles/2/2': Too many levels of symbolic links
./cfiles/2/b contains file(s)
./cfiles/2/a contains file(s)
./cfiles/3 empty
./cfiles/3/b contains file(s)
./cfiles/3/a empty
./cfiles/dirlink empty
find: './cfiles/dirlink/2': Too many levels of symbolic links
./cfiles/dirlink/b contains file(s)
./cfiles/dirlink/a contains file(s)
./cfiles/1 contains file(s)
./cfiles/1/b empty
./cfiles/1/a empty
./cfiles/space d contains file(s)
number of directories (including symbolic links) with c files: 9
number of directories without c files: 5
$
Команда, которую вы первоначально задавали в вашем вопросе chsh -s which bash, была, как вы говорите, опечаткой, которая вызвала много путаницы вокруг вашего вопроса. Даже если бы он был правильно сформирован с символами, вокруг которых bash, как показано ниже.
изменит оболочку на bash (по умолчанию). Чтобы изменить оболочку на fish, используйте
или просто используйте команду chsh и введите путь к оболочке, которую хотите использовать. См. Ниже:
me@zippy-64bit:~$ chsh
Password:
Changing the login shell for me
Enter the new value, or press ENTER for the default
Login Shell [/bin/bash]:
Для получения дополнительной информации о оболочке рыбы см. Это.
РЕДАКТИРОВАТЬ: Что касается оснасток: будет ли оболочка по умолчанию иметь значение? ответ, возможно, так как это зависит от сделанных предположений и подхода, применяемого программистом. Обратите внимание на различия в том, как bash и как рыба обрабатывает вещи в предыдущей ссылке. Например, у рыбы нет неявной подоболочки, которая может вызвать удивительные побочные эффекты при назначении переменных для программиста, ожидающего поведения, подобного bash. Хороший пример ожидания неявной подоболочки в вопросе это.
EDIT: В попытке прояснить, кажется, что концепция Наследование обрабатывается по-разному между рыбой и другими более распространенными раковинами, такими как bash. Я понимаю, что это может привести к неожиданному поведению из труб, циклов и функций (все из которых обычно используются в стратегиях программирования).
Программист также может полагаться на встроенные оболочки, которые либо не могут существовать в рыбы или могут быть реализованы неожиданным образом.
Источники:
man chsh fish в википедических подоболочках на Unix & amp; Linux Похожие сообщения на SuperUser.comКоманда, которую вы первоначально задавали в вашем вопросе chsh -s which bash, была, как вы говорите, опечаткой, которая вызвала много путаницы вокруг вашего вопроса. Даже если бы он был правильно сформирован с символами, вокруг которых bash, как показано ниже.
изменит оболочку на bash (по умолчанию). Чтобы изменить оболочку на fish, используйте
или просто используйте команду chsh и введите путь к оболочке, которую хотите использовать. См. Ниже:
me@zippy-64bit:~$ chsh
Password:
Changing the login shell for me
Enter the new value, or press ENTER for the default
Login Shell [/bin/bash]:
Для получения дополнительной информации о оболочке рыбы см. Это.
РЕДАКТИРОВАТЬ: Что касается оснасток: будет ли оболочка по умолчанию иметь значение? ответ, возможно, так как это зависит от сделанных предположений и подхода, применяемого программистом. Обратите внимание на различия в том, как bash и как рыба обрабатывает вещи в предыдущей ссылке. Например, у рыбы нет неявной подоболочки, которая может вызвать удивительные побочные эффекты при назначении переменных для программиста, ожидающего поведения, подобного bash. Хороший пример ожидания неявной подоболочки в вопросе это.
EDIT: В попытке прояснить, кажется, что концепция Наследование обрабатывается по-разному между рыбой и другими более распространенными раковинами, такими как bash. Я понимаю, что это может привести к неожиданному поведению из труб, циклов и функций (все из которых обычно используются в стратегиях программирования).
Программист также может полагаться на встроенные оболочки, которые либо не могут существовать в рыбы или могут быть реализованы неожиданным образом.
Источники:
man chsh fish в википедических подоболочках на Unix & amp; Linux Похожие сообщения на SuperUser.comКоманда, которую вы первоначально задавали в вашем вопросе chsh -s which bash, была, как вы говорите, опечаткой, которая вызвала много путаницы вокруг вашего вопроса. Даже если бы он был правильно сформирован с символами, вокруг которых bash, как показано ниже.
изменит оболочку на bash (по умолчанию). Чтобы изменить оболочку на fish, используйте
или просто используйте команду chsh и введите путь к оболочке, которую хотите использовать. См. Ниже:
me@zippy-64bit:~$ chsh
Password:
Changing the login shell for me
Enter the new value, or press ENTER for the default
Login Shell [/bin/bash]:
Для получения дополнительной информации о оболочке рыбы см. Это.
РЕДАКТИРОВАТЬ: Что касается оснасток: будет ли оболочка по умолчанию иметь значение? ответ, возможно, так как это зависит от сделанных предположений и подхода, применяемого программистом. Обратите внимание на различия в том, как bash и как рыба обрабатывает вещи в предыдущей ссылке. Например, у рыбы нет неявной подоболочки, которая может вызвать удивительные побочные эффекты при назначении переменных для программиста, ожидающего поведения, подобного bash. Хороший пример ожидания неявной подоболочки в вопросе это.
EDIT: В попытке прояснить, кажется, что концепция Наследование обрабатывается по-разному между рыбой и другими более распространенными раковинами, такими как bash. Я понимаю, что это может привести к неожиданному поведению из труб, циклов и функций (все из которых обычно используются в стратегиях программирования).
Программист также может полагаться на встроенные оболочки, которые либо не могут существовать в рыбы или могут быть реализованы неожиданным образом.
Источники:
man chsh fish в википедических подоболочках на Unix & amp; Linux Похожие сообщения на SuperUser.comКоманда, которую вы первоначально задавали в вашем вопросе chsh -s which bash, была, как вы говорите, опечаткой, которая вызвала много путаницы вокруг вашего вопроса. Даже если бы он был правильно сформирован с символами, вокруг которых bash, как показано ниже.
изменит оболочку на bash (по умолчанию). Чтобы изменить оболочку на fish, используйте
или просто используйте команду chsh и введите путь к оболочке, которую хотите использовать. См. Ниже:
me@zippy-64bit:~$ chsh
Password:
Changing the login shell for me
Enter the new value, or press ENTER for the default
Login Shell [/bin/bash]:
Для получения дополнительной информации о оболочке рыбы см. Это.
РЕДАКТИРОВАТЬ: Что касается оснасток: будет ли оболочка по умолчанию иметь значение? ответ, возможно, так как это зависит от сделанных предположений и подхода, применяемого программистом. Обратите внимание на различия в том, как bash и как рыба обрабатывает вещи в предыдущей ссылке. Например, у рыбы нет неявной подоболочки, которая может вызвать удивительные побочные эффекты при назначении переменных для программиста, ожидающего поведения, подобного bash. Хороший пример ожидания неявной подоболочки в вопросе это.
EDIT: В попытке прояснить, кажется, что концепция Наследование обрабатывается по-разному между рыбой и другими более распространенными раковинами, такими как bash. Я понимаю, что это может привести к неожиданному поведению из труб, циклов и функций (все из которых обычно используются в стратегиях программирования).
Программист также может полагаться на встроенные оболочки, которые либо не могут существовать в рыбы или могут быть реализованы неожиданным образом.
Источники:
man chsh fish в википедических подоболочках на Unix & amp; Linux Похожие сообщения на SuperUser.comУстановки, которые вы установили, можно найти в / snap / bin / У вас должен быть этот каталог в вашем $ PATH.
Ubuntu автоматически добавляет / snap / bin в ваш $ PATH. Это происходит в файле /etc/profile.d/apps-bin-path.sh, который запускается, когда вы получаете оболочку входа.
Я проверил, а fish также добавляет /snap/bin в $ PATH, поэтому обычно это будет хорошо.
Можете ли вы показать нам вывод команды
echo $PATH
Если на выходе есть /snap/bin, то поздравления вы обнаружили ошибку в Ubuntu, и вы может записать отчет на Launchpad для него.
дополнение: Ubuntu внутренне, вероятно, использует $ SHELL для некоторых скриптов. Оболочка fish не на 100% совместима с bash, и похоже, что это является причиной проблемы. Это обычная проблема, когда вы меняете свою оболочку входа в нечто иное, чем bash. См. Например, этот отчет https://youtrack.jetbrains.com/issue/CPP-2919, когда пользователи меняют свою оболочку на /bin/tcsh.
Вам нужно отправить отчет об ошибке в Ubuntu, чтобы кто-то исследовал и исправил внутренние скрипты для работы с fish. Если вы действительно любите fish, это то, что вам нужно сделать. -
)Установки, которые вы установили, можно найти в / snap / bin / У вас должен быть этот каталог в вашем $ PATH.
Ubuntu автоматически добавляет / snap / bin в ваш $ PATH. Это происходит в файле /etc/profile.d/apps-bin-path.sh, который запускается, когда вы получаете оболочку входа.
Я проверил, а fish также добавляет /snap/bin в $ PATH, поэтому обычно это будет хорошо.
Можете ли вы показать нам вывод команды
echo $PATH
Если на выходе есть /snap/bin, то поздравления вы обнаружили ошибку в Ubuntu, и вы может записать отчет на Launchpad для него.
дополнение: Ubuntu внутренне, вероятно, использует $ SHELL для некоторых скриптов. Оболочка fish не на 100% совместима с bash, и похоже, что это является причиной проблемы. Это обычная проблема, когда вы меняете свою оболочку входа в нечто иное, чем bash. См. Например, этот отчет https://youtrack.jetbrains.com/issue/CPP-2919, когда пользователи меняют свою оболочку на /bin/tcsh.
Вам нужно отправить отчет об ошибке в Ubuntu, чтобы кто-то исследовал и исправил внутренние скрипты для работы с fish. Если вы действительно любите fish, это то, что вам нужно сделать. -
)Установки, которые вы установили, можно найти в / snap / bin / У вас должен быть этот каталог в вашем $ PATH.
Ubuntu автоматически добавляет / snap / bin в ваш $ PATH. Это происходит в файле /etc/profile.d/apps-bin-path.sh, который запускается, когда вы получаете оболочку входа.
Я проверил, а fish также добавляет /snap/bin в $ PATH, поэтому обычно это будет хорошо.
Можете ли вы показать нам вывод команды
echo $PATH
Если на выходе есть /snap/bin, то поздравления вы обнаружили ошибку в Ubuntu, и вы может записать отчет на Launchpad для него.
дополнение: Ubuntu внутренне, вероятно, использует $ SHELL для некоторых скриптов. Оболочка fish не на 100% совместима с bash, и похоже, что это является причиной проблемы. Это обычная проблема, когда вы меняете свою оболочку входа в нечто иное, чем bash. См. Например, этот отчет https://youtrack.jetbrains.com/issue/CPP-2919, когда пользователи меняют свою оболочку на /bin/tcsh.
Вам нужно отправить отчет об ошибке в Ubuntu, чтобы кто-то исследовал и исправил внутренние скрипты для работы с fish. Если вы действительно любите fish, это то, что вам нужно сделать. -
)Установки, которые вы установили, можно найти в / snap / bin / У вас должен быть этот каталог в вашем $ PATH.
Ubuntu автоматически добавляет / snap / bin в ваш $ PATH. Это происходит в файле /etc/profile.d/apps-bin-path.sh, который запускается, когда вы получаете оболочку входа.
Я проверил, а fish также добавляет /snap/bin в $ PATH, поэтому обычно это будет хорошо.
Можете ли вы показать нам вывод команды
echo $PATH
Если на выходе есть /snap/bin, то поздравления вы обнаружили ошибку в Ubuntu, и вы может записать отчет на Launchpad для него.
дополнение: Ubuntu внутренне, вероятно, использует $ SHELL для некоторых скриптов. Оболочка fish не на 100% совместима с bash, и похоже, что это является причиной проблемы. Это обычная проблема, когда вы меняете свою оболочку входа в нечто иное, чем bash. См. Например, этот отчет https://youtrack.jetbrains.com/issue/CPP-2919, когда пользователи меняют свою оболочку на /bin/tcsh.
Вам нужно отправить отчет об ошибке в Ubuntu, чтобы кто-то исследовал и исправил внутренние скрипты для работы с fish. Если вы действительно любите fish, это то, что вам нужно сделать. -
)