Как можно ls -l
изменить выходные данные для разделения полей с помощью табуляции вместо пробелов? Я хочу вставить вывод в электронную таблицу; заполнение с переменным количеством пробелов затрудняет это. Проиллюстрировать:
корень drwxr-xr-x 2 корень 4096 сен 26 11:43 wpa_supplicant -rw-r ----- 1 root dialout 66 сент. 26 11:43 wvdial.conf drwxr-xr-x 9 корень корень 4096 8 октября 08:21 X11 drwxr-xr-x 12 root root 4096 18 февраля 23:31 xdg drwxr-xr-x 2 root root 4096 31 января 06:11 xml drwxr-xr-x 2 root root 4096 22 ноября, 07:26 xul-ext -rw-r - r-- 1 корневой корень 349 13 января 2012 г. zsh_command_not_found
В отрывке из ls -l /etc
показанного выше строки 1, 2 и 3 имеют одну цифру в столбце 2, тогда как строка 4 имеет две цифры. Это означает, что выравнивание достигается использованием двух пробелов для разделения столбцов 1 и 2 в строках 1-3, но только одним пробелом в ряду 4.
ls
, чтобы узнать, что говорит , то разбор этого результата - это хорошо. Это редко является целью. Возможно, это здесь. Я думаю, что метод, который вы использовали, довольно хорош (любой метод будет давать нежелательные результаты при определенном наборе потребностей)! Тем не менее, возможно, разборls
может быть лучше. Рассмотрим случай имени файла, в котором есть символ табуляции.ls -l
заменяет вкладку?
символом. Ваш сценарий сохраняет символ табуляции, который создает дополнительные столбцы, если его выходные данные интерпретируются как разделенные табуляцией и используются для создания электронной таблицы. Это плохо ухудшается, если в имени файла есть новая строка.\n
или\t
в их именах. Если они это сделают, то анализ выводаls
с помощью простых команд bash будет более сложным, но может быть достигнут. Я могу обновить ответ, если ОП хочет обрабатывать такие случаи.\n
и\t
их именами.printf "%s\t%s\t%s\t%s\r\n" $mod_month $mod_day $mod_time $file
и для перенаправления выходного файла как./ls_tab.sh > listing.txt
.Пытаться:
Или, если ваши имена файлов имеют пробелы:
источник
awk
, для чего. Умный!$9
не меняет того факта, что выawk
всегда интерпретируете пробелы как указание на разрыв между столбцами.$9
захватывает только первое слово в этой позиции, и, поскольку другие слова считаются отдельными столбцами с более высокими номерами, они вообще никогда не печатаются.Нам даже не нужно конвертировать вывод как Tab Delimited. Пространство между столбцами достаточно просто.
Запустите вашу
ls -l
команду в терминале, как обычно, и скопируйте содержимое, которое вы хотите вставить в электронную таблицу.Затем откройте программу электронных таблиц (в моем случае LibreOffice Calc) и нажмите Ctrl+, Vчтобы вставить содержимое буфера обмена.
Откроется Мастер импорта текста. Убедитесь, что вы поставили галочку рядом
Space
и нажмите Ok. Вы можете посмотреть предварительный просмотр в нижней панели.источник
Python хорош для этого:
источник