ls, regexp и переменная среды

Теперь, когда Вы знаете, какое кодирование используется для имен файлов на удаленном конце ("latin1" - согласно комментариям к первому ответу), Вы могли также следовать, второй путь - выполняет локальный termninal и ssh таким способом, которым удаленные имена файлов отображены правильно (а не первый путь: переименуйте их).

Как я, Вы могли запустить терминал локально, который будет работать в том специальном кодировании, возможно, как это:

LC_ALL=en_US.latin1 xvt и

xvt обозначает Вашу терминальную программу.

Возможно, существующую локаль называют en_US.iso88591, и нет en_US.latin1, поскольку я принял.

5
25.01.2011, 23:10
2 ответа

Ваша команда расширяется до этого:

export VIDEOS=mp4 VIDEOS=wmv VIDEOS=avi VIDEOS=flv VIDEOS=mkv VIDEOS=m4u VIDEOS=mpg VIDEOS=mpeg

Выполните это для наблюдения то, что происходит:

echo export VIDEOS={mp4,wmv,avi,flv,mkv,m4u,mpg,mpeg}

(это назвало расширение фигурной скобки),


Вторая проблема - это bash действительно заключает в фигурные скобки расширение перед расширением параметра, не после него, таким образом, что-либо, что похоже на Ваше решение, будет грязно.

Необходимо было бы сделать что-то вроде этого:

eval echo \*.$VIDEOS

который станет раздражающим для ввода каждый раз.

Как насчет чего-то вроде этого:

videos() {
    find . -mindepth 1 -maxdepth 1 -type f \
        \( -name "*.mp4" -o -name "*.wmv" -o -name "*.avi" -o \
           -name "*.flv" -o -name "*.mkv" -o -name "*.m4u" -o \
           -name "*.mpg" -o -name "*.mpeg" \)
}

Затем вместо выполнения:

ls *.$VIDEOS

просто сделайте это:

videos

или если необходимо передать его команде:

ls $(videos)

Эта работа части:

echo *.{mp4,wmv,avi,flv,mkv,m4u,mpg,mpeg}

мог быть ключ к разгадке .bash_profile не работа. Например, это могло бы означать, что Вы используете zsh.

Скажите нам, что это делает:

echo $0

таким образом, мы можем выяснить, какой файл необходимо вставить его.

5
27.01.2020, 20:39
  • 1
    0$ =>/bin/bash –  nbarraille 25.01.2011, 06:58
  • 2
    Ну, затем это любой должно войти .bashrc или .bash_profile, В зависимости от Вашей установки. Попробуйте обоих. –  Mikel 25.01.2011, 07:17
  • 3
    Хорошо, спасибо за Ваше сообщение это было полезно. Я попытаюсь поместить его в .bashrc, и я сообщу. –  nbarraille 25.01.2011, 14:33

Вы могли, вероятно, использовать массивы для этого. Ваш синтаксис должен будет несколько отличаться:

export VIDEOS=(.mp4 .wmv .avi .flv .mkv .m4u .mpg .mpeg)

и затем сделайте

ls ${VIDEOS[*]/./*.}

Если Вы только хотите перечислить видео с именами, запускающимися с foo, Вы сделали бы

ls ${VIDEOS[*]/./foo*.}
2
27.01.2020, 20:39

Теги

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