Переименовать начальную строку в имени файла

Я настоятельно рекомендую dateutils для подобных вещей. ( yum install dateutils в Fedora 21+ или CentOS / RHEL 7 с EPEL.) Затем просто выполните:

dateround today sunday

Вы можете использовать «сегодня» или заменить фактическую дату:

$ dateround 2015-08-30 saturday
2015-09-05

Если вам нужно дата ввода должна быть в определенном формате, например 30-AUG-2015, вы можете использовать -i или - input-format , например:

$ dateround -i '%d-%b-%Y'30-AUG-2015 saturday
2015-09-05

0
21.11.2018, 08:48
2 ответа

Предполагая, что вы используете оболочку из семейства Bourne, вы можете удалить самую короткую начальную подстроку, соответствующую символу подчеркивания включительно, из переменной имени файла f, используя${f#*_}

Пр.

$ touch Voice_XYZZ_1_1801.pdf Voice_XYZZ_1_1801.ndx Electon_MNOPQ_1_1801.pdf Electon_MNOPQ_1_1801.ndx

$ for f in Voice_* Electon_*; do echo "${f#*_}"; done
XYZZ_1_1801.ndx
XYZZ_1_1801.pdf
MNOPQ_1_1801.ndx
MNOPQ_1_1801.pdf

Вы можете использовать это вместе с командой mvдля переименования файлов, например.

for f in Voice_* Electon_*; do mv "$f" "${f#*_}"; done

Копирование в другое место может быть выполнено аналогичным образом с помощью команды cp, например.

for f in Voice_* Electon_*; do cp "$f" "newdir/${f#*_}"; done
0
28.01.2020, 04:24

Это можно очень легко сделать из командной строки -, вызвав Perl one -лайнер:

ls *_* | perl -ne 'chomp($_); $orig = $_; $_ =~ s/[^_]*_//; rename $orig,$_;'

Вот объяснение кода:

  • Отправить все имена файлов, в имени которых есть '_', следующей команде

    лс_|

  • Для каждой из передаваемых строк выполните команду

    перл -пе

  • Удалить новую строку из имени файла (, оставшуюся после выполнения команды 'ls')

    жевать ($ _);

  • Удалите первую часть слова, выполняя поиск, пока не найдете ' _'

    $_=~с/[^]*//;

  • Переименуйте файл

    переименовать $orig,$ _;

0
28.01.2020, 04:24

Теги

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