Как я перемещаю некоторых, но не все файлы от одного каталога до другого?

zmv руководство находится в zshcontrib страница справочника. Можно достигнуть его непосредственно с

LESS="$LESS+/^ *zmv *\\[" man zshcontrib

(или LESS=$LESS+/zmv man zshcontrib который берет Вас несколько строк далее потому что zmv упоминается в описании zcp). Можно использовать man zshall вместо man zshcontrib если zshall страница справочника доступна в Вашей системе.

При использовании Информации можно достигнуть ее путем выполнения info zsh и ввод i затем ввод zmv.

info --index-search=zmv zsh

У руководства zsh есть довольно подробный раздел по zmv. Поиск zmv на этом сайте поднимет несколько примеров использования переменной сложности.

Можно выполнить пробный прогон с zmv -n (-n распространенный способ запросить пробный прогон).

Извлечь выгоду из zmv и друзья, это помогает иметь код как следующее в Вашем ~/.zshrc:

autoload zmv
alias zmv='noglob zmv'
alias zcp='noglob zmv -C'
alias zln='noglob zmv -L'
alias zsy='noglob zmv -Ls'

4
05.08.2011, 15:10
3 ответа

Если Вы имеете удар и не заботитесь о также соответствии файлам как apple.not-a-number, попробовать

shopt -s extglob
mv apple.!(0) /new/directory
4
27.01.2020, 20:46
  • 1
    bash: !: event not found брошен. –  Olgun Kaya 05.08.2011, 12:13
  • 2
    я собираюсь пробовать ls, egrep и mv с каналами. –  Olgun Kaya 05.08.2011, 12:15
  • 3
    , Который не будет вполне работать, Вы не можете использовать && оператор для объединения их. Сначала необходимо работать shopt -s extglob опция установить оболочку для использования расширенного globing режима затем можно использовать тот шаблон шарика. Путем этот ответ отформатирован, оболочка пытается сделать globing на командной строке, прежде чем любая из команд (включая ту о включении опции) будет выполнена. –  Caleb 05.08.2011, 15:16
  • 4
    @OlgunKaya: Это будет работать и соответствовать Вашим файлам точно так же, как Вы хотите если Вы первый показ shopt -s extglob затем в любом после команды или позже в Вашем сценарии используют тот шаблон. –  Caleb 05.08.2011, 15:17
  • 5
    @Caleb Благодарит, Вы правы. Я зафиксировал его, но ответ Marcel является все еще лучшим. –  jw013 05.08.2011, 15:18

при использовании удара, необходимо смочь использовать

mv apple.[^0]* /other/directory/

это переместит любые файлы, из которых расширение не запускается с 0 ("^" в начале [], означает "не" в ударе). Если Вы уверены, что существует только один символ как окончание, Вы могли бы также использовать

mv apple.[^0] /other/directory/

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

shopt -s extglob
mv apple.@([1-9])*([0-9]) /other/directory/

это не соответствовало бы яблоку 01 или подобный хотя....

и последний, который должен получить все файлы яблока, заканчивающиеся в числах

shopt -s extglob
mv apple.*([1-9]|[0-9]+([0-9])) /other/directory/
8
27.01.2020, 20:46
  • 1
    Здорово. Я не знал, что удар поддерживал regexes. :) –  balki 05.08.2011, 15:19
  • 2
    ответа Технически, шарики не являются довольно нормальным regex. Шарик [1-9][0-9]* будет на самом деле соответствовать любому шаблону, который начинается с двух цифр в диапазоне, которому соответствовали бы 10-99 сопровождаемых чем-либо, например, 23apples. –  jw013 05.08.2011, 15:49
  • 3
    я перепутал что-то (regex по сравнению с шариками/расширениями как упрямые и jw023 указывают) :-) последняя опция не делает то, что я объяснил, что это делает..., таким образом, я зафиксировал его с новыми опциями на основе решения jw0123. –  Marcel G 05.08.2011, 16:56
  • 4
    @balki и regexes похожи на мужа и жену. –  mr_eclair 05.08.2011, 20:17
  • 5
    С extglob, Вы получаете питание regexps, но в подстановочном синтаксисе. zsh аналог к этим, которыми управляет удар, должен использовать setopt ksh_glob вместо shopt -s extglob, или использовать setopt extended_glob затем mv apple.*~apple.0 /other/directory/. –  Gilles 'SO- stop being evil' 06.08.2011, 03:02

Быть столь конкретным, как Вы хотите на файле переместиться а не переместиться

find /source/directory -maxdepth 1 -name "apple.*" ! -name "apple.0" -exec mv {} /new/directory \;
2
27.01.2020, 20:46

Теги

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