Я должен отображать только имена файлов или каталогов с этой конструкцией:
ls -Al | while read string
do
...
done
ls -Al
выход :
drwxr-xr-x 12 s162103 studs 12 march 28 12:49 personal domain
drwxr-xr-x 2 s162103 studs 3 march 28 22:32 public_html
drwxr-xr-x 7 s162103 studs 8 march 28 13:59 WebApplication1
Например, если я попробую:
ls -Al | while read string
do
echo "$string" | awk '{print $9}
done
затем выводить только файлы и каталоги без пробелов. Если в файле или каталоге есть пробелы типа «персональный домен», это будет только слово «персональный».
Мне нужно очень простое решение. Может быть, есть лучшее решение, чем awk.
linux
command-line
ls
Алекс Зерн
источник
источник
ls -Al *' '*
?ls
Вывод разбора никогда не приводит ни к чему хорошему.ls -Al | while
. Простой и более надежный способfor string in *; do echo "$string"; done
.ls
? Разборls
и "работа во всех * nix и не сломается, если что-то случилось" не идут хорошо вместе.Ответы:
Вы действительно не должны анализировать вывод
ls
. Если это домашнее задание, и вы обязаны это сделать, ваш профессор не знает, о чем они говорят. Почему бы вам не сделать что-то вроде этого:Добро...
или же
...плохо...
Если вы действительно хотите использовать его
ls
, вы можете сделать его более надежным, выполнив что-то вроде этого:... и безобразный
Если вы настаиваете на том, что делаете это неправильно, опасно и вам просто нужно использовать
while
цикл, сделайте следующее:Если серьезно, просто не надо.
источник
drwx------ 2 s162103 studs 3 oct. 9 2012 .ssh drwxr-xr-x 3 s162103 studs 6 oct. 25 09:02 .subversion drwxrwxrwt 3 s162103 studs 3 nov. 15 2012 .TempoItems
иногда у меня свидание без времени, только год и пустышка возвращаются пустымиls
.-l
переключатель? Если вам нужны только имена файлов, просто запуститеls -A
. Использование-l
просто усложняет вашу жизнь, так как теперь вам нужно анализировать результаты.ls
это просто не лучший способ получить то, что вам нужно. Почему бы вам не опубликовать новый вопрос, объясняющий информацию, которую вы хотите собрать, и мы можем предложить способы сделать это. Кроме того, вы можете использовать свой сценарий как есть и использовать одно из предложенных выше предложений только для печати названия. А если серьезно, не разбирайсяls
, просто скажи нам точно, что ты пытаешься сделать в новом вопросе.Есть ли какая-то причина, по которой
ls -A1
* не будет работать?Например:
* Примечание: это заглавная буква А и номер один.
источник
Интересно, почему никто не упомянул эту простую команду:
источник
sort
приводит к тому, что блок из нескольких столбцов не разворачивается в один столбец?ls
возвращается кls -1
(вывод одного столбца), когда его вывод не идет в терминал (и отключает цитирование / замену непечатных символов; @Kusalananda, выls
не POSIX-совместимы, если это все еще происходит).ls
вывод уже отсортирован. Так что передача егоsort
в лучшем случае ничего не будет делать, а в худшем случае искажает вывод (если имена файлов содержат символы новой строки) или завершится неудачно для имен файлов, которые не являются текстовыми.ls -a | cat
было бы лучше. Или даже лучше,ls -A1
как уже упоминалось (и потому, что вы обычно хотите замены / цитирования при отображении на терминале)ls
ведет себя по-разному, когда вывод не является терминалом.Вы не можете анализировать выходные данные
ls
, не говоря уже о том,ls -l
что символ новой строки, как и пробел, является таким же допустимым символом, как и любой другой символ в имени файла. Кроме того, вам нужно рассмотреть символические ссылки, которые имеют вывод, как... foo -> bar
.Зачем вам в
-l
любом случае использовать, если вы хотите только имя файла?Просто сделать:
Если вы хотите включить точечные файлы (кроме
.
и..
), в зависимости от оболочки:zsh
:bash
:ksh93
:POSIXly:
источник
Как насчет:
источник
сжать несколько пробелов в единичные пробелы с помощью tr, тогда вы можете использовать cut для разделения полей
источник
Попробуйте (
bash
,zsh
,ksh93
синтаксис):Смотрите также:
ls
? в Unix SEисточник
попробуйте
ls -1
Thats Integer 1С man-страницы.
источник
он показывает, какие файлы в каком каталоге.
источник