Этот журнал показывает, что Solaris 10 загружается с существующего жесткого диска, а не с загрузочного носителя Solaris 11. (Сообщение Запуск входа в рабочий стол на дисплее: 0 ... исходит от старого диспетчера входа в систему CDE, который не включен в Solaris 11.)
Убедитесь, что вы указали системе для загрузки с компакт-диска, а не с диска, обычно вводя boot cdrom
в строке ok
:
Если я вас правильно понял(Нет, см. вторую часть ответа ), вы хотите избежать перечисления имен файлов, содержащих символ точки.
Так и будет:
find. -type f ! -name '*.*'
Шаблон подстановки имени файла *.*
будет соответствовать любому имени файла, содержащему хотя бы одну точку. Предыдущий !
отрицает смысл совпадения, что означает, что пути, доходящие до конца, будут именами файлов, в именах которых нет точек. В действительно древних оболочках вы можете захотеть экранировать !
как\!
(или обновить вашу установку Unix ). Одинокий !
не будет вызыватьbash
средство расширения истории .
Чтобы напечатать только компонент имени файла из найденного пути, с помощью GNUfind
:
find. -type f ! -name '*.*' -printf '%f\n'
Со стандартнымfind
(или GNU find
, если уж на то пошло):
find. -type f ! -name '*.*' -exec basename {} \;
Прежде чем использовать это в подстановке команд в цикле, см. " Почему перебор вывода find является плохой практикой? ".
Чтобы перечислить все имена файлов и в то же время удалить все после последней точки в имени («удалить расширение» ), вы можете использовать
find. -type f -exec sh -c '
for pathname do
pathname=$( basename "$pathname" )
printf "%s\n" "${pathname%.*}"
done' sh {} +
Это приведет к отправке всех найденных путей ко всем файлам в короткий цикл оболочки. Цикл будет брать каждое имя пути и вызывать для него basename
, чтобы извлечь компонент имени файла из имени пути, а затем печатать результирующую строку со всем после удаления последней точки.
Расширение параметра ${pathname%.*}
означает «удалить кратчайшую строку, соответствующую.*
(буквальной точке, за которой следует произвольный текст )с конца значения $pathname
». Это приведет к удалению суффикса имени файла после последней точки в имени файла.
Дополнительную информацию о find... -exec... {} +
см., например. " Понимание опции -exec команды `find`".
В Linux нет такого понятия, как расширение файла. .
в имени файла не имеет никакого значения (, несмотря на то, что .
в качестве первого символа в имени файла идентифицирует его как скрытый файл ).
Кроме того, проверка страницы руководства для find
в моей системе не показывает опции --ignore
.
Тем не менее, если вы хотите игнорировать любые файлы с .
в имени, вы можете использовать find
оператор -not
:
find -type f -not -name '*.*' -print
попробуй
find. -type f \! -name '*.*' -print
где
\!
:не (! нужно сбежать)name '*.*'
:имя файла с расширением Как указывали другие, "расширения" на самом деле ничего не значат для Unix-систем. Но мы можем удалить их из списка с помощью простой команды sed
.
напр.
find * -type f -print | sed 's/\.[^.]*$//'
Если есть каталоги, и вы не хотите, чтобы они отображались в списке, тогда
find * -type f -printf "%f\n" | sed 's/\.[^.]*$//'
Для одного каталога мы можем просто использовать ls
вместоfind
ls | sed 's/\.[^.]*$//'