Должен обрезать названия имен файлов

От man zshoptions

HIST_VERIFY
    Whenever the user enters a line with history expansion,  don't  execute  the  line
    directly;  instead, perform history expansion and reload the line into the editing buffer.

Отключить эту выполненную опцию setopt no_hist_verify. Можно также взглянуть на файл конфигурации и удалить hist_verify опцию или просто явно отключить его.

3
17.11.2018, 22:42
3 ответа

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

for f in * ; do mv "$f" "$(echo "$f" | cut -d- -f2)"; done

Если Вам не нравится, когда эхо сокращает ерунду, я могу искать строковые правила в ударе для Вас.

2
27.01.2020, 21:11
  • 1
    я согласовал Ваш код немного для включения большего количества кавычек. Кроме того, не анализируйте ls вывод. –   02.07.2013, 23:09
  • 2
    :) Спасибо! я должен был знать лучше, чем парсинг ls, но был слишком ослеплен путем не сразу знания строковых правил удара. –  Josh Berry 02.07.2013, 23:15
  • 3
    По-видимому, исходный плакат использует ksh. –   02.07.2013, 23:17
  • 4
    Спасибо за Ваш ответ..... изменяется мое имя файла, но это было похоже на этот $ (34178248-BPI_TAX_EX эхо - .pdf |-d-f2 сокращения). Любое предложение, я действительно ценю в течение Вашего времени –  sam 02.07.2013, 23:31
  • 5
    , которую можно использовать cut -d- -f2- вместо этого. –   02.07.2013, 23:35
for f in *; do 
    regular="${f#*-}"
    echo "$f => $regular"
done

Это расширение параметра (${f#*-}) удаляет, от запуска значения переменной, самая короткая строка, которая заканчивается дефисом (см. руководство). Так:

$ f=32456113-summary-report.doc
$ echo "$f => ${f#*-}"
32456113-summary-report.doc => summary-report.doc
4
27.01.2020, 21:11
  • 1
    mv: не может переименовать/tmp/34178248 к/tmp/34178248//34178248: Недействительный аргумент/u01/r2id10/r2id10appl/xxps/11.5.0/bin/xxps_multiple_email3: плохая замена/u01/R2ID10/R2ID10appl/xxps/11.5.0/bin/XXPS_MULTIPLE_EMAIL3 Программа, из которой выходят с состоянием 1 –  sam 02.07.2013, 23:41
  • 2
    Этот код не мог бы работать на ksh, который является тем, что использует @sam. –   02.07.2013, 23:42
  • 3
    Этот код действительно работает в ksh, это - то, где я протестировал его. @sam, покажите то, что Вы на самом деле выполняете, редактируете свой вопрос с большим количеством деталей. –  glenn jackman 02.07.2013, 23:45
  • 4
    mv - "34178248-2640006.pdf" "$ {34178248-2640006.pdf}", когда я использую это, я получил желаемый результат, может я автоматизировать процесс для всех файлов в каталоге –  sam 03.07.2013, 02:39

Можно использовать perl-rename.

perl-rename 's/[0-9]*-//' <files>

Завися Ваша ОС/дистрибутив, эту утилиту можно назвать rename. Для сейфа используйте -n флаг с perl-rename сделать пробный прогон прежде на самом деле переименовать любые файлы.

2
27.01.2020, 21:11
  • 1
    ksh [6]: синтаксическая ошибка в строке 6: ';' неожиданный.... я получил это, когда я выполняю вышеупомянутую команду в winscp –  sam 02.07.2013, 22:29
  • 2
    , Если я использую, переименовывают его, говорит не допустимую команду –  sam 02.07.2013, 22:32
  • 3
    Как Вы выполняете команду? Это - часть сценария? –   02.07.2013, 23:07
  • 4
    я выполняю его в обоих сценариях, а также в winscp также, когда я работаю в winscp, я получил эту ошибку –  sam 02.07.2013, 23:33
  • 5
    я никогда не использовал ksh или winscp, таким образом, я могу пропускать что-то, но я нахожу это странным, что Вы получаете ошибку на строке 6, когда Вы только выполняете одну строку. –   02.07.2013, 23:36

Теги

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