Для сортировки записей по правильному порядку номеров (например, 1, 2, 3, [...], 9, 10, 11, 12) вместо символа сортировки (например, 1, 10, 11, 12, 2, 3, [...], 9) вы можете использовать команду ls
с опцией -v
и печатать по одной строка с опцией -1
.
Измените вашу команду на TMPLIST = "$ (ls -v1 $ MYWEBAPPSRV_DIR)"
, чтобы создать список со всеми файлами в правильном порядке.
Я не совсем понимаю, что вы имеете в виду, когда говорите, что вам нужен только каталог, а не файл. Если я неправильно понял, поясните, пожалуйста. Вот сценарий, который, учитывая путь, выполнит некоторый код, если это файл, или другой код, если это каталог. Сохраните проверяемый путь в переменной с именем $ test, чтобы это работало.
if [ "$(ls -ld $test | grep '^d')" != "" ]
then echo "Directory code here"
else echo "File code here"
fi
GNU ls также имеет -v естественный вид номеров (версий) в тексте
, например sort -V
.
Пробелы в имени файла можно устранить, удалив пробел из $ IFS
(при условии, что у вас нет новых строк в именах файлов):
$ IFS=$'\n'
$ for x in $(ls -v) ; do echo "> $x" ; done
> 1-aa aa
> 2-cc cc
> 10-bb bb
> 21-dd dd
$ vlc $(ls -v)
(Если вы делаете это в интерактивном режиме, IFS
останется измененным впоследствии.)
Для получения дополнительной информации о IFS
см. записи Дэвида Уиллера о специальных символах в именах файлов
Это должно работать
find . -name "*mp4" -print0 | sort -Vz | xargs -0 vlc