Не анализируйте программно вывод ls
.
Вывод ls
предназначен для потребления человеком, а не для программирования. Есть несколько способов, которыми непосредственный анализ может прерваться, более или менее тонко. В качестве примера, если я выполню команду, которую вы дали, я получу другой вывод:
$ mkdir -p newdir/folder0{1,2,3}
$ cd newdir
$ ls -1ad */
folder01//
folder02//
folder03//
$
Видишь эти двойные косые черты? Это потому, что я связал ls
с ls --color=auto -F
.
Лучше использовать инструмент, который предназначен или, по крайней мере, может быть хорошо использован для работы. Я предлагаю обратиться, чтобы find
.
$ mkdir -p newdir/folder0{1,2,3}
$ cd newdir
$ find . -mindepth 1 -maxdepth 1 -type d -printf './process_folder.sh sample/"%P"/\n'
./process_folder.sh sample/"folder03"/
./process_folder.sh sample/"folder01"/
./process_folder.sh sample/"folder02"/
$
-mindepth 1 -maxdepth 1
ограничивает поиск только заданные исходные каталоги .
в данном случае) и исключает сам начальный каталог. -type d
ограничивает соответствие только каталогами. -printf
- это действие, которое может выполнить find, которое печатает метаданные о записи каталога, найденной в заданном формате; %P
в строке формата заменяется именем найденной записи минус начальный каталог. Смотрите man 1 find
для более подробной информации.
Если вы хотите создать скрипт для запуска позже, перенаправьте вывод find
в файл:
$ find . -mindepth 1 -maxdepth 1 -type d -printf './process_folder.sh sample/"%P"/\n' > process_folders.sh
Если вам нужна одна команда, которая выполняет команды немедленно, вместо этого перенаправьте вывод команды find
в оболочку:
$ find . -mindepth 1 -maxdepth 1 -type d -printf './process_folder.sh sample/"%P"/\n' | bash
Это с гораздо меньшей вероятностью сломается и даст вам то, что вы хотите, не прибегая к причудливой перезаписи вывода команды. Как есть, я подозреваю, что единственное, что может нарушить это, - это если в именах каталогов есть двойные кавычки.