Как отсортировать файлы в папке с помощью Bash? - PullRequest
5 голосов
/ 23 января 2011

У меня есть эти файлы в папке:

chap11-solutions.pdf
chap12-solutions.pdf
chap13-solutions.pdf
chap14-solutions.pdf
chap15-solutions.pdf
chap16-solutions.pdf
chap17-solutions.pdf
chap21-solutions.pdf
chap22-solutions.pdf
chap23-solutions.pdf
chap24-solutions.pdf
chap25-solutions.pdf
chap26-solutions.pdf
chap2-solutions.pdf
chap3-solutions.pdf
chap4-solutions.pdf
chap5-solutions.pdf
chap6-solutions.pdf
chap7-solutions.pdf
chap8-solutions.pdf
chap9-solutions.pdf

как мне отсортировать их следующим образом: chap1 ..., chap ... 2, ...., chap11 ...,chap12, ... используя оболочку Ubuntu bash?Спасибо.

Ответы [ 4 ]

24 голосов
/ 23 января 2011
ls|sort -V

Параметр -V гарантирует, что chap10 будет считаться выше, чем chap9.

8 голосов
/ 23 января 2011

GNU ls имеет встроенную сортировку версий:

ls -lv
2 голосов
/ 23 января 2011

Если у вас есть рубин (1.9.1 +)

ruby -e 'puts Dir["chap*pdf"].sort_by{|x|x[/\d+/].to_i}'
1 голос
/ 23 января 2011

Предполагая, что вы хотите переименовать файлы, чтобы вам не нужно было сортировать их позже:

for f in chap*-solutions.pdf; do num=`echo $f | grep -o "[0123456789]\+"`; two_num=`printf "%02d" $num`; mv $f chap$two_num-solutions.pdf; done
  • grep -o "[0123456789]+" выводит номер главы (одна или две цифры)
  • printf возвращает строку, содержащую число с нулем
...