как удалить все символы после «?» включительно в имени файла?

Вы пытались использовать ssh -Y для подключения? Похоже, что переадресация X11 по-прежнему не происходит, и вы пытаетесь запускать удаленные программы X локально, а не удаленно, используя локальный дисплей.

1
17.03.2019, 20:56
2 ответа

Вы можете сопоставить все имена файлов со знаком вопроса с помощью *\?*и удалить часть после ?из переменной с помощью ${var%%\?*}. Сам вопросительный знак является подстановочным знаком, поэтому его необходимо экранировать в обоих случаях.

Простой цикл по файлам и запуск mvдолжен сделать:

for f in./*\?*; do
    echo mv -n "$f" "${f%%\?*}"
done

(Здесь есть echo, чтобы вы могли видеть, что будет сделано, прежде чем будут внесены какие-либо изменения. Удалите его, если вывод выглядит разумным.)

2
28.04.2021, 23:35

Использование утилиты Perl rename:

$ rename -v -n 's/[?].*//' *[?]*
rename(file1.doc?b1h2uj3b123uiyb12, file1.doc)
rename(file2.xls?oi12jo3ij123oij, file2.xls)
rename(file3.jpg?0990xcizx0cxzczixuchbiasdu, file3.jpg)

Это применяет замену Perl s/[?].*//к каждому имени. Это усекло бы имя непосредственно перед первым вопросительным знаком. Шаблон подстановки имени файла *[?]*расширится до любого имени в текущем каталоге, которое содержит вопросительный знак.

Запустите команду без -n, чтобы фактически переименовать файлы.

0
28.04.2021, 23:35

Теги

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