Я хочу перебрать каждую строку в выводе: ls -l /some/dir/*
Прямо сейчас пытаюсь: for x in $(ls -l $1); do echo $x; done
Однако это перебирает каждый элемент в строке отдельно, поэтому я получаю:
-r--r-----
1
ivanevf
eng
1074
Apr
22
13:07
File1
-r--r-----
1
ivanevf
eng
1074
Apr
22
13:17
File2
Но я хочу перебирать каждую строку в целом. Как я могу это сделать?
Ответы:
Установите IFS на новую строку, например:
Если вы не хотите устанавливать IFS постоянно, поместите вокруг него дополнительную оболочку:
Или используйте while | читайте вместо этого:
Еще один вариант, который запускает while / read на том же уровне оболочки:
источник
read -r
иначе bash удалит неэкранированные обратные косые черты из данных.Это зависит от того, что вы хотите делать с каждой строкой. awk - полезная утилита для этого типа обработки. Пример:
.. в моей системе печатает имя и размер каждого элемента в каталоге.
источник
Как уже упоминалось, для этого подходит awk. Если вы не хотите использовать awk, вместо анализа вывода «ls -l» построчно, вы можете перебрать все файлы и выполнить «ls -l» для каждого отдельного файла следующим образом:
источник
Вы также можете попробовать
find
команду. Если вам нужны файлы только в текущем каталоге:Выполнить команду для каждого из них?
Считать строки, но только в файлах?
источник
Утилита read (1) вместе с перенаправлением вывода команды ls (1) сделает то, что вы хотите.
источник
Итак, почему никто не предложил просто использовать опции, устраняющие части, которые он не хочет обрабатывать.
В современном Debian вы просто получаете свой файл с помощью:
Более того, вам не нужно обращать внимание на то, в каком каталоге вы его запускаете, если вы используете полный каталог:
Эту последнюю команду я использую выше и получаю следующий результат:
источник