Похож, возможно, Вы не устанавливаете канал и "режим". Я использую простой сценарий, который делает эти команды оболочки:
ifconfig wlan0 down
iwconfig wlan0 mode managed
ifconfig wlan0 up
iwconfig wlan0 channel 3
iwconfig wlan0 key xxxxxxxxxx
iwconfig wlan0 key restricted
iwconfig wlan0 essid "Blah Blah Foo Bar"
iwconfig wlan0 ap xx:yy:zz:aa:bb:cc
sleep 5
dhcpcd -d wlan0
Необходимо вставить ключ и MAC-адрес точки доступа. Это находится под Slackware 13.1, и я использую WRT54GL рабочий DD-WRT. Очень к моему позору, я использую шифрование WEP. Я должен был сделать некоторое экспериментирование о когда к "ifconfig" и wlen к "iwconfig" и в какой порядок установить ESSID и AP.
bash
фигурные скобки, {}
, перечислит их в порядке:
for file in log{1..164}.gz; do
process "$file"
done
Почему не использовать встроенный ls
функция этого конкретного случая, а именно,
-v natural sort of (version) numbers within text
Например, ls -1v log*
sort
, в случае, если у каждого есть массив строк, а не каталог файлов
– Hubro
06.01.2015, 09:56
-v - Force unedited printing of non-graphic characters
.
– kenorb
26.02.2015, 19:33
С GNU ls (т.е. на Linux, Cygwin или других системах, которые имеют GNU ls конкретно установленный):
ls -v
В zsh:
echo *(n)
В других оболочках:
echo log?.gz log??.gz log???.gz
Замена echo
printf '%s\n'
если Вы хотите каждое имя файла на отдельной строке.
Если Вы хотите метаданные файла также (ls -l
) и у Вас нет GNU ls, необходимо будет звонить ls
отдельно для каждого имени файла или группы имен файлов, которые Вы хотите видеть в лексикографическом порядке.
ls -ld log?.gz; ls -ld log??.gz; ls -ld log???.gz
Для предотвращения этих трудностей использование, достаточно продвижения обнуляет в именах файлов так, чтобы лексикографический вид был человечески-благоприятен (log001.gz
, и т.д.).
Решение для Perl:
ls log*.gz | perl -ne 'sub getnum{ $_[0] =~ /log(\d+)\.gz/; $1 }; push @A, $_; END{ print sort { getnum $a <=> $b } @A}'
В то время как решение ls -1v
является, конечно, самым хорошим в данном случае, я думаю, что хорошо иметь также то, которое работает с sort
как в исходном вопросе, так как это работает также, когда Ваш вход не прибывает из ls
. В этом случае можно использовать:
ls -1 | sort -n -k1.4
-n
опция говорит вид виду численно, и -k 1.4
устанавливает ключ сортировки на первое поле (который является целым именем файла в этом случае), начинающий с 4-го символа до последнего.
ls -1 | sort -n -k1.4
не работает. Это дает неотсортированные сначала, до 4 символов затем отсортировали после 4-го символа. Я использовал ls -1 |sort | sort -n -k1.4
вместо этого и это работало отлично.
– Prabhu
12.09.2014, 23:53
sort -k1.1,1.3 -k1.4n
. sort
реализации не требуются, чтобы быть стабильными, таким образом, Ваш подход не будет работать со всеми реализациями. См. также -V
опция GNU и FreeBSD sort
.
– Stéphane Chazelas
26.05.2015, 14:11
Моя версия Соляриса не поддерживает ls -v
(grrr). И решение для вида, предоставленное выше 1) требует знания положения цифр в имени файла и 2) не обрабатывает вещи как многослойные номера версий.
Подход ниже совместим с Солярисом, не требует предвидения позиций символа и обрабатывает номера версий с 2, 3 или 4 компонента (как: a-1.2, нечто 5.6.7, bar_baz_9.10.11.12). Это также использует sort -f
сворачиваться верхний - и нижний регистр вместе, и правильно обрабатывает каталоги, смешанные с файлами:
ls -d | sort -f -t . -k 1,1 -k 2,2n -k 3,3n -k 4,4n
Обратите внимание, что эта версия ограничивает первый компонент единственной цифрой.
Если Ваша целевая операционная система (системы) поддерживает ls -v
, это - ясно отличное решение.
GNU sort
(как доступно в Linux) имеет режим "сортировки версий", который интерпретирует числа внутри нечисел просто так, как вы просите:
Из man 1 sort
:
-V, --version-sort натуральный вид (версии) номеров в тексте
(Создание пустых тестовых файлов для списка:
touch log1.gz log2.gz log3.gz log99.gz log100.gz log101.gz log102. gz
)
Пример вашего случая, добавив опцию -V
(или --версия-sort
):
ls -1 log*.gz | sort -V
log1.gz
log2.gz
log3.gz
log99.gz
log100.gz
log101.gz
log102.gz
$ ls
log101.gz log102.gz log103.gz log104.gz log105.gz log106.gz log10.gz log1.gz
$ ls | sort -t . -n -k1.4
log1.gz
log10.gz
log101.gz
log102.gz
log103.gz
log104.gz
log105.gz
log106.gz
, если вы используете Mac или BSD, попробуйте следующее:
ls -1 *.jpg | sort -n
Мне это помогло.
У меня есть файлы 1.jpg 2.jpg... 18.jpg
$ echo *.jpg | tr -s ' ' '\n' | sort -n
sort
путают с выводом ls
из-за непечатаемых цветных символов. Если вы попробуете это:
ls -1 --color=none *.jpg | sort -n
это будет работать отлично.
sort
может игнорировать непечатаемые символы с опцией -i
, но это все еще не работает, и я не знаю, почему.
Но вы всегда можете убрать цвет таким образом, и sort
будет работать:
ls -1 --color=always *.jpg | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g" | sort -n
Я надеюсь, что однажды sort
появится такая возможность.