Какая команда в СЦЕНАРИИ заставит следующую «ls» НЕМЕДЛЕННО вывести список файлов?

$ awk -F';' '{file=substr($1,2)".csv";if(NR>1){print $0 > file}}' inputFile

Используйте substr, чтобы получить имя файла и добавить к нему .csv, и NR>1, чтобы игнорировать заголовок и, наконец, записать в файл.

$ head *csv

==> 11.csv <==
"11;"Example";"200";"Descripcion here...";

==> 21.csv <==
"21;"Example2";"300";"Some here...";
0
23.08.2020, 01:25
2 ответа

Единственное правдоподобное различие между lsв терминале и lsв скрипте заключается в том, что вы использовали псевдоним lsдля передачи опции, которая требует не только чтения списка имен файлов, но и прочитать атрибуты файла. Вариант, вероятно, --color. Чтение списка имен файлов требует чтения только из самого каталога, тогда как чтение атрибутов файла требует доступа к индексному узлу каждого отдельного файла (с помощью системного вызова lstat). Поэтому, когда вы запускаете lsв этом сценарии, в кэш попадают только имена файлов, а не их атрибуты. При первом запуске lsв терминале или использовании файлового менеджера с графическим интерфейсом необходимо загрузить атрибуты.

Передайте те же параметры для lsв вашем скрипте, которые вы используете на терминале.

10 секунд для отображения всего 700 файлов — это ненормально медленно. Размер файлов значения не имеет. Типичные современные системы начинают заметно замедляться только с десятками или сотнями тысяч файлов, если не больше.

3
18.03.2021, 23:16

Узнать в чем проблема можно запустив после перезагрузки:

strace -tt -o ls.strace ls /path/to/directory

Вывод lsможно ускорить с помощью ls -U, но, конечно, это меняет вывод.

700 файлов — это немного. Некоторого ускорения можно добиться, переписав все записи каталога :

.
mkdir /tmpdir/on/the/same/filesystem
mv * /tmpdir/on/the/same/filesystem
mv /tmpdir/on/the/same/filesystem/*.

Но наиболее эффективным решением может быть автоматическое чтение каталога в фоновом режиме при загрузке.

2
18.03.2021, 23:16

Теги

Похожие вопросы